2014-09-30 55 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; 
     } 
    } 
} 
相關問題