(DataGridView + Binding)如何根据绑定的对象来着色线?

我想根据绑定对象的属性为特定行添加背景颜色。

我拥有的解决方案(它的工作原理)是使用Event DataBindingComplete但我不认为这是最好的解决方案。

这是事件:

  private void myGrid_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e) { for (int i = 0; i < this.myGrid.Rows.Count; i++) { if((this.myGrid.Rows[i].DataBoundItem as MyObject).Special) { this.myGrid.Rows[i].DefaultCellStyle.BackColor = Color.FromArgb(240, 128, 128); } } } 

还有其他更好的选择吗?

您还可以将事件处理程序附加到RowPostPaint:

 dataGridView1.RowPostPaint += OnRowPostPaint; void OnRowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e) { MyObject value = (MyObject) dataGridView1.Rows[e.RowIndex].DataBoundItem; DataGridViewCellStyle style = dataGridView1.Rows[e.RowIndex].DefaultCellStyle; // Do whatever you want with style and value .... } 

我并没有真正使用WinForms,但在ASP中你会使用’ItemDataBound’方法。 在DataGrid的Windows窗体中是否有类似的东西?

如果是这样,在该方法中,事件参数将包含数据绑定项以及DataGrid行。 所以一般代码看起来像这样(语法可能是关闭的):

 if(((MyObject)e.Item.DataItem).Special) e.Item.DefaultCellStyle.BackColor = Color.FromArgb(240, 128, 128); 

我会建议一些事情:

  • 看看_OnRowDatabound修改你的行
  • 不要在代码中设置颜色! 这将是一个很大的错误。 使用attributes属性并设置cssclass。 用手指摇晃着人们仍在这样做。

如果您在实施方面遇到困难,请告诉我,我将发布一个代码段。