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

时间:2008-11-12 16:06:11

标签: c# .net winforms .net-2.0 c#-2.0

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

我拥有的解决方案(并且有效)是使用事件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);
            }
        }
    }

还有更好的其他选择吗?

4 个答案:

答案 0 :(得分:7)

您还可以将事件处理程序附加到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
    ....
}

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:1)

我会建议一些事情:

  • 查看在_OnRowDatabound
  • 修改行
  • 不要在代码中设置颜色!这将是一个很大的错误。使用attributes属性并设置cssclass。对于仍在这样做的人来说,手指摇摆不定。

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

答案 3 :(得分:0)

private void myGrid_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
{

    foreach (DataGridViewRow row in myGrid.Rows)
    {
        if((row.DataBoundItem as MyObject).Special)
        {
            row.DefaultCellStyle.BackColor = Color.FromArgb(240, 128, 128);
        }
    }
}