2013-05-28 131 views
1

我想根據datakey爲我的gridview背景rowcolor着色。我想要的是,每個數據鍵名稱的分組都會以灰色着色,然後下一個顏色爲白色,然後是下一個顏色灰色等,因此基於不同的數據鍵名稱進行交替。這是我下面的代碼。有人能幫我嗎?Gridview基於gridview datakeyname的背景顏色

protected void grdContents_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    //Default values 
    string strPreviousDataKeyValue = ""; 
    Color RowColor = Color.grey; 
    foreach (GridViewRow row in grdContents.Rows) 
    { 
     if (!strPreviousDataKeyValue.Equals(grdContents.DataKeys[row.RowIndex].Value.ToString())) 
     { 
      row.BackColor = RowColor; 
      strPreviousDataKeyValue = grdContents.DataKeys[row.RowIndex].Value.ToString(); 
     } 
    } 
} 
+2

因此,有你的代碼,沒有工作?如果不是,你能指出問題嗎? –

+0

爲什麼不在GridView中使用''? – Emre

+1

我正在嘗試更改分組數據名稱的顏色 – Jeff

回答

3

RowDataBound是在GridView每一行執行。所以你的foreach循環相當多餘。您還必須檢查正確的RowType = DataRow

這應該工作:

protected void grdContents_RowDataBound(Object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     if (e.Row.RowIndex == 0) 
      e.Row.BackColor = Color.Gray; 
     else 
     { 
      var thisKey = grdContents.DataKeys[e.Row.RowIndex].Value; 
      var prevKey = grdContents.DataKeys[e.Row.RowIndex - 1].Value; 
      var prevRow = grdContents.Rows[e.Row.RowIndex - 1]; 
      if (thisKey.Equals(prevKey)) 
       e.Row.BackColor = prevRow.BackColor; 
      else 
       e.Row.BackColor = prevRow.BackColor == Color.Gray ? Color.White : Color.Gray; 
     } 
    } 
} 
+1

這正是我所要做的。儘管如此,代碼僅將前兩行更改爲灰色。 – Jeff

+0

得到它的工作。謝謝。 – Jeff

+1

@ user1049984:我很高興聽到你有這個工作,但是出了什麼問題? –

相關問題