2014-09-30 101 views
0

基本上我所拥有的是绑定到DataGridView的数据表。我想要发生的是在数据网格中的每个单元格中显示错误类型的工具提示,如果某些例外情况属实的话。在DataGridView中向用户显示错误

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

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

importGrid是我DataGridViewcsvData是我DataTable

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"); 
} 

回答

1

你为什么不循环后绑定RowsCells在所有,测试条件,并设置ErrorText

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

这很好,谢谢! – adamwhiles 2014-09-30 18:40:34

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; 
     } 
    } 
}