C# 基于Gridview datakeyname的Gridview背景色

C# 基于Gridview datakeyname的Gridview背景色,c#,asp.net,gridview,C#,Asp.net,Gridview,我正在尝试根据数据键为gridview背景行着色。我想要的是,每一组数据键名称都用灰色表示,然后是白色,然后是灰色,等等。因此,根据不同的数据键名称进行交替。下面是我的代码。有人能帮我吗 protected void grdContents_RowDataBound(object sender, GridViewRowEventArgs e) { //Default values string strPreviousDataKeyValue = ""; Color Row

我正在尝试根据数据键为gridview背景行着色。我想要的是,每一组数据键名称都用灰色表示,然后是白色,然后是灰色,等等。因此,根据不同的数据键名称进行交替。下面是我的代码。有人能帮我吗

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();
        }
    }
}

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;
        }
    }
}

这就是你的代码,它起作用了吗?如果没有,您可以指定问题吗?为什么不在gridview中使用
?我正在尝试更改分组数据键名称的颜色这正是我想要的。代码只将前两行更改为灰色。@user1049984:我很高兴听到你让它工作了,但是怎么了?