1

datagridview のデフォルト エラー ダイアログ ボックスが表示されます。そこには、dataerror イベントを処理すると書かれています。データテーブルから myy DGV にデータをロードしています。新しい行を追加しようとすると、(*) が付いた空の行をクリックします。新しい行セルにいくつかの値を入力し始めると、dataerror が表示され、無限ループに入ります。

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

ありがとうサン

4

2 に答える 2

2

MSDN は次のように述べています。

通常、このイベントに関連付けられた DataGridViewDataErrorEventArgs オブジェクトの ColumnIndex および RowIndex プロパティは、データ エラーが発生したセルを示します。ただし、外部データ ソースでエラーが発生した場合、データ ソースはエラーが発生した列を提供しない場合があります。この場合、通常、ColumnIndex プロパティは、エラー発生時の現在のセルの列を示します。

これらのプロパティを使用して、エラーが発生する列を見つけます。

于 2012-05-08T19:59:08.263 に答える
0

わからない。MessageBox.ShowステートメントをSystem.Diagnostics.Debug.WriteLineに置き換えて、RowsValidatingイベントで同じことを行ってください。この場合、MessageBoxは処理を「一時停止」するため、問題が発生する可能性があります。

private void dataGridView1_DataError(object sender, DataGridViewDataErrorEventArgs e) 
{ 
    System.Diagnostics.Debug.WriteLine(e.Context.ToString()); 
    e.Cancel = true; 
} 
于 2012-05-08T19:53:44.133 に答える