根据数据设置Row的BackColor - DataGridView的最后一行的DataBoundItem为空

时间:2016-07-11 14:53:26

标签: c# winforms datagridview

我在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);
}

其中SourceContactStatusDataGridView获取数据的数据源,_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)为什么最后一行的DataBoundItemnull

(2)如何解决此问题并根据Color属性正确设置每行的背景颜色?

0 个答案:

没有答案