2012-05-08 19 views
1

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

DataGridViewDataError.context = display. 
Error: Index 3 does not have a value. 

私のグリッドは3rowsを持っており、ここに新しい行がインデックス3.

ここで私はコード内で場所を正確に知っていない

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

    } 

DGVがロードされているコードがありますがありますこれは事件です。 DataErrorイベントを処理しました。確かUserAddedRows場合、RowsValidatingは有用であろう

private void dataGridView1_DataError(object sender, DataGridViewDataErrorEventArgs e) 
     { 
      MessageBox.Show(e.Context.ToString()); 
      e.Cancel = true; 
     } 

+0

これらのことは、各列に定義されたデータ型が一致しない場合に発生します。それを確認してください! – nawfal

答えて

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

System.Diagnostics.Debug.WriteLineはどこに出力を書き込みますか? – user575219

+0

Visual Studio出力ウィンドウ。表示 - >出力; Ctrl + W、O – volody

2

MSDNは、以下のサイス:

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

これらのプロパティを使用して、エラーが発生した列を特定します。

+0

dataGridView1_DataErrorイベントでe.Rowindex = 3とe.colindex = -1が返される – user575219

+0

nawfalの示唆以外に、TID列を読み取り専用に設定しないでください。これを行い、RowIndexプロパティとColumnIndexプロパティがどのような値を保持しているかを確認します。 – Daniel

関連する問題