2010-12-13 72 views
9

我需要區分兩個連續的單元格。在不同的值上更改單元格顏色 - Gridview

當數據綁定到gridview的值時,如果它們具有不同的值,那麼它們中的每一個都是連續的。

因此,如果在行1中有單元格「ABC」,並且在行2中有單元格「CBA」。

我需要用不同顏色對每個單元格着色。

這樣做的最佳方法是什麼?

回答

1

你可以在gridview的rowdatabound事件上做到這一點。將前一行保留在視圖狀態或會話中,並將其與下一行進行匹配。如果不匹配,則更改顏色,否則不要更改。

+0

該解決方案的工作原理是使用viewstate獲取最後一行值。謝謝。 – 2010-12-13 11:31:09

13

這就是所謂的條件格式

您可以在標記

<asp:GridView ID="gridview1" runat="server" OnRowDataBound="RowDataBound"> 

</asp:GridView> 

使RowDataBound事件,並把這個在您的代碼隱藏文件。

protected void RowDataBound(Object sender, GridViewRowEventArgs e) 
{ 
    if(e.Row.RowType == DataControlRowType.DataRow) 
    { 
     if(e.Row.RowIndex == 0)  // This is row no.1 
      if(e.Row.Cells[0].Text == "ABC") 
       e.Row.Cells[0].BackColor = Color.Red; 

     if(e.Row.RowIndex == 1)  // This is row no.2 
      if(e.Row.Cells[0].Text == "CBA") 
       e.Row.Cells[0].BackColor = Color.Green; 
    } 
} 
+0

該解決方案通過調整代碼稍微有效。我沒有使用if(e.Row.RowIndex == 0)作爲我的GridView總是返回1行。我還使用了for循環來遍歷gridview中的所有單元格 – 2016-08-03 10:06:20

2

如果我明白你的意思,你想改變一個單元格的顏色,取決於它的值。 如果這是正確的,你可以嘗試這樣的:

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     if ((Label)e.Row.Cells[0].FindControl("ValueHoldingControl").Text == "ABC") 
     { 
      //Coloring the cell 
     } 
    } 
} 
4

添加到你的GridView在頁面OnRowDataBound =「gridView1_DataBinding」的HTML部分。然後添加事件處理程序代碼隱藏:

protected void gridView1_DataBinding(object sender, GridViewRowEventArgs e) 
    { 

     if (e.Row.RowType != DataControlRowType.DataRow) return; 

     var c = e.Row.FindControl("IdOfControl") as Label; 
     if(c != null) 
     { 
      if (c.Text == "ABC") 
       e.Row.BackColor = GetColor("Gray"); 

      if (c.Text == "BCA") 
       e.Row.BackColor = GetColor("Green"); 
     } 
    } 

    private Color GetColor(string color) 
    { 
     return Color.FromName(color); 
    } 

問候,迪馬。

0
void gvShowFullDetail_RowDataBound(object sender, GridViewRowEventArgs e) 
    { 
     if (e.Row.RowType == DataControlRowType.DataRow) 
     { 
      e.Row.BackColor = System.Drawing.ColorTranslator.FromHtml("#AECD6F"); 
     } 
    }