DataError对话框

时间:2012-05-08 19:02:52

标签: c# winforms

我收到一个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;
        }

谢谢 太阳

2 个答案:

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