(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)如何根据绑定的对象为线着色?的主要内容,如果未能解决你的问题,请参考以下文章
C# winform 如何用datagridview增、删、改数据
如何为 POST 请求调试 TypeScript NS_BINDING_ABORTED