我有一个显示DataTable内容的DataGridView。
我想根据此行中单元格的值设置行的背景颜色。
请注意,相关单元格位于DataGridView中未显示的列中(Visible = False)。
答案 0 :(得分:1)
如果您处理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#,请告诉我。
祝你好运!
答案 1 :(得分:1)
RowDataBound,如前所述;您还可以检查数据对象的值以及网格本身中的文本:
void gridView_DataBound(object sender, GridViewEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow) { var myObject = (myObject)e.DataItem; if (myObject.IsOverdue()) { e.Row.CssClass = "overdue"; } } }
答案 2 :(得分:0)
另一种选择是使用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;
}
}