基本上我拥有的是一个绑定到DataGridView的数据表。我想要发生的是,如果某些异常为真,则在数据网格中的每个单元格中显示错误类型工具提示。
我已经能够使用CellValidating获取红色错误警报以显示在单元格中。问题是用户必须单击一个单元格,然后将该单元格置于焦点之外,以使警报变为可见。
我也尝试在数据表上使用ColumnChanging来设置RowError,但这根本不起作用。这是我尝试过的一些示例代码。
importGrid
是我的DataGridView
,
csvData
是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");
}
答案 0 :(得分:1)
为什么在绑定后不要遍历所有Rows
和Cells
,测试条件并设置ErrorText
?
foreach(DataGridViewRow row in DGV.Rows)
foreach(DataGridViewCell cell in row.Cells)
if (yourCondition) cell.ErrorText = yourErrorText;
答案 1 :(得分:0)
您可能会发现有两个有用的事件。 RowErrorTextNeeded
和CellErrorTextNeeded
。以下是我使用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;
}
}
}