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

Posted

技术标签:

【中文标题】(DataGridView + Binding)如何根据绑定的对象为线着色?【英文标题】:(DataGridView + Binding)How to color line depending of the object binded? 【发布时间】:2008-11-12 16:06:10 【问题描述】:

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

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

还有其他更好的选择吗?

【问题讨论】:

【参考方案1】:

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

【讨论】:

这种方法会导致每次重新绘制一行时都会运行一点额外的代码。在足够大的数据集或足够慢的盒子上,差异可能足以引起注意。可能不是问题,但这是与原始解决方案相比的缺点。 是的,但这仅对显示的行调用,因此如果数据网格包含很多行并且只显示少数行,则应用格式的初始成本会更低。【参考方案2】:

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

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

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

【讨论】:

【参考方案3】:

我会建议一些事情:

查看在 _OnRowDatabound 中修改行 不要在代码中设置颜色!!!这将是一个很大的错误。使用 attributes 属性并设置 cssclass。向仍在这样做的人挥手致意。

如果您在实施过程中遇到困难,请告诉我,我会发布一个 sn-p。

【讨论】:

不要在代码中设置颜色?如果它不在表单中(视图),你想让我在哪里给线条着色......

以上是关于(DataGridView + Binding)如何根据绑定的对象为线着色?的主要内容,如果未能解决你的问题,请参考以下文章

数据库更新后datagridview怎么重新绑定数据源

如何为datagridview加上序号

C# winform 如何用datagridview增、删、改数据

如何为 POST 请求调试 TypeScript NS_BINDING_ABORTED

C# winfrom datagridview 如何为一列添加向下滚动条 请看清楚再回答!

Aurelia binding