显示datagridview的行已更新/插入或从DataTable出错

时间:2012-08-18 19:45:13

标签: vb.net datagridview datatable

我想向用户显示网格中哪一行出错,更新或插入。

网格以前管理过所有行和列,但是我正在更改它,所以它都是用sqlAdapter(dataTables)创建/填充的。

所以...我可以看到一行是否有错误或已被插入...但是通过DataRow,例如:

usrGrdPieces.getGrid.DataSource.DataSource.GetChanges()

但是这只给了我绑定网格的dataSet,而不是网格的实际行。 我不知道如何显示这些行的细节。

之前有一个添加的列,其中有一个图像用于行coulb所处的每个状态,是否可以使用bindingSource生成的网格进行处理?

或者,如果可能只是将绿色/红色的细胞或行变暗,我也会感到高兴...

感谢任何可以提供帮助的人!

1 个答案:

答案 0 :(得分:1)

您可以通过行的DataBoundItem将数据绑定到数据表的网格中的行到达DataRow。

例如,假设我要突出显示已添加的绿色行和使用DataRow对象上的DataRowState属性修改的橙色行。您可以在列中显示图像而不是背景颜色。错误状态不是存储在数据行中的东西,因此根据您的意思,您必须进行其他检查。出于这个例子的目的,假设有一个名为“Name”的列应该是50个字符或更少。如果它不止于此,我将突出显示红色的行,通常我会使用单元格/行的“ErrorText”属性来表示存在错误,但我会坚持使用此示例的颜色。< / p>

我会处理CellFormatting事件(我在C#中编写了这个,因为我对它更熟悉,但VB中的属性/概念是相同的。)

dataGridView_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
    DataGridView grid = (DataGridView) sender;
    DataRowView currentRowView = (DataRowView) grid.Rows[e.RowIndex].DataBoundItem;
    DataRow currentRow = (DataRow)currentRowView.Row;
    string name = currentRow["Name"].ToString();
    if (name.Length > 50)
    {
        grid.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.Red;
    }
    else if (currentRow.RowState == DataRowState.Added)
    {
        grid.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.Green;
    }
    else if (currentRow.RowState == DataRowState.Modified)
    {
        grid.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.Orange;
    }
}