0

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

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

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

usrGrdPieces.getGrid.DataSource.DataSource.GetChanges()

但这只会给我网格绑定的数据集,而不是网格的实际行。而且我不知道如何显示这些行的细节。

之前为该行所在的每个状态添加了一个包含图像的列,即使使用 bindingSource 生成的网格也可以做到吗?

或者,如果可以仅以绿色/红色突出显示单元格或行,我也会很高兴......

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

4

1 回答 1

1

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

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

我将处理 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;
    }
}
于 2012-08-20T21:46:46.977 回答