【问题标题】:Gridview Background color based on gridview datakeyname基于gridview datakeynames的Gridview背景色
【发布时间】:2013-05-28 13:38:27
【问题描述】:

我正在尝试根据数据键为我的 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();
        }
    }
}

【问题讨论】:

  • 有你的代码,它有效吗?如果不是,您能具体说明问题吗?
  • 你为什么不在你的gridview中使用<RowStyle BackColor="Gray" /> <AlternatingRowStyle BackColor="White" />
  • 我正在尝试更改分组数据键名称的颜色

标签: c# asp.net gridview


【解决方案1】:

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

【讨论】:

  • 这正是我想要的。不过,该代码仅将前两行更改为灰色。
  • @user1049984:我很高兴听到你让它工作了,但是出了什么问题?
猜你喜欢
  • 2015-09-28
  • 1970-01-01
  • 2013-02-11
  • 1970-01-01
  • 2011-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-29
相关资源
最近更新 更多