我在Windows窗体中遇到以下问题:我需要在DataGridView
中加载一些数据。问题是每行对应的对象都有Color
属性,指定该行的背景颜色。
所以我尝试了以下代码:
SourceContactStatus.DataSource = _contactStatusAppService.LoadGridData();
foreach (DataGridViewRow row in GridContactStatus.Rows)
{
ContactStatusGridViewModel vm = row.DataBoundItem as ContactStatusGridViewModel;
row.DefaultCellStyle.BackColor = ColorTranslator.FromHtml(vm.Color);
}
其中SourceContactStatus
是DataGridView
获取数据的数据源,_contactStatusAppService.LoadGriData()
返回使用存储库构建的IList<ContactStatusViewModel>
。
现在,这不起作用,因为foreach
循环开始时,GridContactStatus.Rows
属性的元素为零。我相信这是因为数据绑定不完整,因为稍后会出现行。
问题是我在数据绑定完成之前尝试设置背景颜色。
我尝试在foreach
事件处理程序中放置相同的GridContactStatus.DataBindingComplete
循环,但后来我得到一个异常,因为某些东西是空的。
编辑:我尝试使用GridContactStatus.DataBindingComplete
事件处理程序连接代码时使用的代码是这样的:
GridContactStatus.DataBindingComplete += (sender, args) =>
{
foreach (DataGridViewRow row in GridContactStatus.Rows)
{
ContactStatusGridViewModel vm = row.DataBoundItem as ContactStatusGridViewModel;
row.DefaultCellStyle.BackColor = ColorTranslator.FromHtml(vm.Color);
}
};
现在我调试了这段代码,发现其中一个rows.DataBoundItem
为空。为了测试它我添加了3个项目,所有三个都被正确找到。但GridContactStatus.Rows
有4个元素,最后一个元素有DataBoundItem = null
。
(1)为什么最后一行的DataBoundItem
为null
?
(2)如何解决此问题并根据Color
属性正确设置每行的背景颜色?