GridView資料欄條件式變色機制
出自ProgWiki
用途
- 從資料來源在Select時,取出變色判斷用的邏輯值(假設為IsA、IsB、IsC)
程式碼範例
版本1.隱藏式CheckBox版本
- 這個欄位放在GridView1的第1個欄位的地方
<asp:TemplateField HeaderText="變色用判斷條件"> <ItemTemplate> <asp:CheckBox ID="IsACheckBox" runat="server" style="display:none" Checked='<%# Eval("IsA") %>' /> <asp:CheckBox ID="IsBCheckBox" runat="server" style="display:none" Checked='<%# Eval("IsB") %>' /> <asp:CheckBox ID="IsCCheckBox" runat="server" style="display:none" Checked='<%# Eval("IsC") %>' /> </ItemTemplate> </asp:TemplateField>
- 在 GridView1 需使用 RowDataBound 事件處理函數
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) { //TODO: GridView1_RowDataBound //變色相關 switch (e.Row.RowType) { case DataControlRowType.EmptyDataRow: case DataControlRowType.Header: break; case DataControlRowType.Footer: break; case DataControlRowType.DataRow: { TableCellCollection tcDataRow = e.Row.Cells; //多加變色判斷用欄位, 所以所有的欄位邊號都加1, 最後再移除欄位0 //IsA勾選(原欄位2,白底藍字) if ((tcDataRow[0].FindControl("IsACheckBox") as CheckBox).Checked == true) { Style StyleColor = new Style(); StyleColor.BackColor = System.Drawing.Color.White; StyleColor.ForeColor = System.Drawing.Color.Blue; tcDataRow[3].ApplyStyle(StyleColor); } //IsB勾選(原欄位3,白底紅字) if ((tcDataRow[0].FindControl("IsBCheckBox") as CheckBox).Checked == true) { Style StyleColor = new Style(); StyleColor.BackColor = System.Drawing.Color.White; StyleColor.ForeColor = System.Drawing.Color.Red; StyleColor.CssClass = "NoWrap"; tcDataRow[4].ApplyStyle(StyleColor); } //IsC勾選(原欄位0~10,黃底紅字) if ((tcDataRow[0].FindControl("IsCCheckBox") as CheckBox).Checked == true) { for (int x = 1; x <= 11; x++) { Style StyleColor = new Style(); StyleColor.BackColor = System.Drawing.Color.Yellow; StyleColor.ForeColor = System.Drawing.Color.Red; tcDataRow[x].ApplyStyle(StyleColor); } } tcDataRow.RemoveAt(0); //移除顏色判斷用欄位 } break; //case DataControlRowType.EmptyDataRow: // break; } }
版本2.((DataRowView)e.Row.DataItem)的版本
- 在 GridView1 需使用 RowDataBound 事件處理函數
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) { //TODO: GridView1_RowDataBound //變色相關 switch (e.Row.RowType) { case DataControlRowType.EmptyDataRow: case DataControlRowType.Header: break; case DataControlRowType.Footer: break; case DataControlRowType.DataRow: { TableCellCollection tcDataRow = e.Row.Cells; //多加變色判斷用欄位, 所以所有的欄位邊號都加1, 最後再移除欄位0 //IsA勾選(原欄位2,白底藍字) if (((DataRowView)e.Row.DataItem)["IsA"]) { Style StyleColor = new Style(); StyleColor.BackColor = System.Drawing.Color.White; StyleColor.ForeColor = System.Drawing.Color.Blue; tcDataRow[3].ApplyStyle(StyleColor); } //IsB勾選(原欄位3,白底紅字) if (((DataRowView)e.Row.DataItem)["IsB"]) { Style StyleColor = new Style(); StyleColor.BackColor = System.Drawing.Color.White; StyleColor.ForeColor = System.Drawing.Color.Red; StyleColor.CssClass = "NoWrap"; tcDataRow[4].ApplyStyle(StyleColor); } //IsC勾選(原欄位0~10,黃底紅字) if (((DataRowView)e.Row.DataItem)["IsC"]) { for (int x = 1; x <= 11; x++) { Style StyleColor = new Style(); StyleColor.BackColor = System.Drawing.Color.Yellow; StyleColor.ForeColor = System.Drawing.Color.Red; tcDataRow[x].ApplyStyle(StyleColor); } } tcDataRow.RemoveAt(0); //移除顏色判斷用欄位 } break; //case DataControlRowType.EmptyDataRow: // break; } }