我收到一个datagridview默认错误对话框。它说处理dataerror事件。 我正在从数据表中加载myy DGV中的数据。当我尝试添加新行时,单击带有(*)的空行。当我开始在新行单元格中键入一些值时,会显示dataerror并进入infinte循环。
DataGridViewDataError.context = display.
Error: Index 3 does not have a value.
我的网格有3个,这里新行的索引为3.
这是加载DGV的代码
private void frmPlant_Load(object sender, EventArgs e)
{
Program.fMain = this;
Program.LoadAllForms();
string selectCommand = "select * from T1";
FillData(selectCommand);
}
private void FillData(string selectCommand)
{
using (SQLiteConnection conn = new SQLiteConnection(connString))
{
conn.Open();
dataGridView1.AutoGenerateColumns = true;
da = new SQLiteDataAdapter("selectCommand", connString);
ds = new DataSet();
commandBuilder = new SQLiteCommandBuilder(da);
da.Fill(ds, "T1");
dt = ds.Tables[0];
dataGridView1.DataSource = ds.Tables[0];
dataGridView1.DataMember = "T1";
dataGridView1.Columns["TID"].ReadOnly = true;
}
}
我不知道代码究竟在哪里发生了。处理了DataError事件。不确定UserAddedRows,RowsValidating是否有用
private void dataGridView1_DataError(object sender, DataGridViewDataErrorEventArgs e)
{
MessageBox.Show(e.Context.ToString());
e.Cancel = true;
}
谢谢 太阳
答案 0 :(得分:2)
MSDN如下:
与此事件关联的DataGridViewDataErrorEventArgs对象的ColumnIndex和RowIndex属性通常指示发生数据错误的单元格。但是,当外部数据源中发生错误时,数据源可能不会提供发生错误的列。在这种情况下,ColumnIndex属性通常表示错误时当前单元格的列。
使用这些属性可以找出错误发生在哪个列中。
答案 1 :(得分:0)
不确定。尝试用System.Diagnostics.Debug.WriteLine替换MessageBox.Show语句,并在RowsValidating事件中执行相同的操作。在这种情况下,MessageBox可能会导致问题,因为它会“暂停”处理。
private void dataGridView1_DataError(object sender, DataGridViewDataErrorEventArgs e)
{
System.Diagnostics.Debug.WriteLine(e.Context.ToString());
e.Cancel = true;
}