在DataGridView中向用户显示错误

时间:2014-09-30 16:17:57

标签: c# datagridview datatable

基本上我拥有的是一个绑定到DataGridView的数据表。我想要发生的是,如果某些异常为真,则在数据网格中的每个单元格中显示错误类型工具提示。

我已经能够使用CellValidating获取红色错误警报以显示在单元格中。问题是用户必须单击一个单元格,然后将该单元格置于焦点之外,以使警报变为可见。

我也尝试在数据表上使用ColumnChanging来设置RowError,但这根本不起作用。这是我尝试过的一些示例代码。

importGrid是我的DataGridViewcsvDataDataTable

private void importGrid_CellValidating(object sender, 
                                       DataGridViewCellValidatingEventArgs e)
{
  this.importGrid.Rows[e.RowIndex].Cells[e.ColumnIndex].ErrorText ="Drive Letter in use";
}

private void csvData_ColumnChanging(object sender, 
                                    System.Data.DataColumnChangeEventArgs e)
{
   e.Row.RowError = "test error";
   e.Row.SetColumnError(e.Column, "test error 2");
}

2 个答案:

答案 0 :(得分:1)

为什么在绑定后不要遍历所有RowsCells,测试条件并设置ErrorText

foreach(DataGridViewRow row in DGV.Rows)
foreach(DataGridViewCell cell in row.Cells) 
    if (yourCondition) cell.ErrorText = yourErrorText;

答案 1 :(得分:0)

您可能会发现有两个有用的事件。 RowErrorTextNeededCellErrorTextNeeded。以下是我使用RowErrorTextNeeded的一个项目的示例。当行变为可见或任何已更改时,DataGridView会触发此事件。

private void dataGridView1_RowErrorTextNeeded( object sender, DataGridViewRowErrorTextNeededEventArgs e )
{
    DataGridView dataGridView = sender as DataGridView;
    if( dataGridView != null )
    {
        DataRowView view = dataGridView.Rows[e.RowIndex].DataBoundItem as DataRowView;
        if( view != null )
        {
            if( view.Row[invColorColumn] == DBNull.Value )
                e.ErrorText = "Color code is missing from part database.";
            else if( view.Row[invThickColumn] == DBNull.Value )
                e.ErrorText = "Thickness is missing from part database.";
            else if( view.Row[invWidthColumn] == DBNull.Value )
                e.ErrorText = "Width is missing from part database.";
            else if( view.Row[invHeightColumn] == DBNull.Value )
                e.ErrorText = "Height is missing from part database.";
            else 
                e.ErrorText = String.Empty;
        }
    }
}