3

我有一个显示 DataTable 内容的 DataGridView。

我想根据该行中单元格的值设置行的背景色。

请注意,有问题的单元格位于 DataGridView 中未显示的列中 (Visible=False)。

4

3 回答 3

2

如果您处理 RowDataBound 事件,您可以检查数据的值并修改单元格的属性或在该事件处理程序中应用不同的样式。

protected void Page_Load(object sender, EventArgs e)
{
    GridView g1 = new GridView();
    g1.RowDataBound += new GridViewRowEventHandler(g1_RowDataBound);
}

void g1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if(e.Row.RowType == DataControlRowType.DataRow)
    {
        // Check the Value
        if(e.Row.Cells[1].Text = someValue)
        {
            e.Row.Cells[1].CssClass = "colorCellRed";
        }

    }
}

那应该给你你正在寻找的东西。如果您在 VB 而不是 C# 中需要它,请告诉我。

祝你好运!

于 2008-10-10T11:44:38.950 回答
2

RowDataBound,如前所述;您还可以检查数据对象的值,以及网格本身的文本:

void gridView_DataBound(对象发送者,GridViewEventArgs e)
{
  if (e.Row.RowType == DataControlRowType.DataRow)
  {
    var myObject = (myObject)e.DataItem;
    如果 (myObject.IsOverdue())
    {
      e.Row.CssClass = "过期";
    }
  }
}
于 2008-10-10T11:49:39.907 回答
1

另一种选择是使用 CellFormatting 事件。第一个选项显示访问绑定数据项,如果您没有为相关数据设置列,则该选项很有用。如果有列是否可见,则第二个选项有效。

    private void dataGridView_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
        {
            if (((MyDataObject)dataGridView.Rows[e.RowIndex].DataBoundItem).Condition == Value)
            {
                e.CellStyle.BackColor = System.Drawing.Color.Gold;

            }
        }

// 选项二——可以使用 ColumnIndex 代替 ColumnName

    private void dataGridView_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
        {
            if (dataGridView["ColumnName", e.RowIndex].Value).Condition == TargetValue)
            {
                e.CellStyle.BackColor = System.Drawing.Color.Gold;

            }
        }
于 2010-07-14T14:03:41.997 回答