2016-04-13 9 views
1

に結合していないのDataGridViewの変換私はSqlBulkCopyの準備のために別のクラスQueriesDataTableForm1からの私のDataGridView dgvInputを変換しようとしています。 dgvInputを私のクラスQueriesSaveAllのメソッドDataGridView dgvで渡します。のDataTable

をForm1:

public void convert2DT(DataGridView dgv) 
{ 
    Queries qry = new Queries(); 
    qry.SaveAll(dgvInput); 
} 

クラス:

class Queries { 

public void SaveAll(DataGridView dgv) 
    { 
     foreach (DataGridViewRow dr in dgv.Rows) 
     { 
      //Create table and insert into cell value. 
      DataRow dataRow = dt.NewRow(); 
      for (int i = 0; i < noOfColumns; i++) 
      { 
       if (i == 0) 
      >> { dataRow[i] = DateTime.Parse(dr.Cells[i].Value.ToString()); } 
       else if (i == 7) 
       { dataRow[i] = int.Parse(dr.Cells[i].Value.ToString()); } 
       else 
       { dataRow[i] = dr.Cells[i].Value.ToString(); } 
      } 
      dt.Rows.Add(dataRow); 
     } 
    //SqlBulkCopy Codes 
    } 
} 

私はライン>>上とNullReferenceExceptionを取得しています。
エラーメッセージ:オブジェクト参照がオブジェクトのインスタンスに設定されていません。 Newdgvに設定しようとしました。しかし、私はまだ例外を取得します。私が調査したことから、入れ子になったforループは、仕事を正しく行うべきです(SHOULD)。

どうすれば解決できますか?

+1

dr.Cells [i] 'または' dr.Cells [i] .Value'のいずれかがヌルです。おそらくそれは 'dr.Cells [i]'でしょう。条件付き演算子を使用します。 – Ian

+0

ありがとうございました! 'dr.Cells [i] .Value'は' null'です。具体的には、生成する第1行はnullです。何とかそのヌル行を削除できますか? – Hexxed

+0

@Ian NVM。私はちょうどなぜそのヌルを発見した。私の最後の行は空白です。 'AllowUserToAddRows = false'を設定するだけです。お手伝いありがとう。あなたの答えを下記に投稿してください。だから私はそれを受け入れることができた。 – Hexxed

答えて

1

dr.Cells[i].Valuenullであり、これは後で見つかるようにオプションAllowUserToAddRows = trueのために空の最後の行が原因で発生します。これを解決するには、AllowUserToAddRows = falseと入力してください。

しかし、より良いdr.Cells[i].Valueが、それは見つけることができるところはどこでも、それはnullセルの値に向けて、それをより強固にするために処理する前に、nullない場合は、まだ確認するには:

for (int i = 0; i < noOfColumns; i++) 
{ 
    if (dr.Cells[i].Value == null) 
     continue; //don't process 
    if (i == 0) 
    { dataRow[i] = DateTime.Parse(dr.Cells[i].Value.ToString()); } 
    else if (i == 7) 
    { dataRow[i] = int.Parse(dr.Cells[i].Value.ToString()); } 
    else 
    { dataRow[i] = dr.Cells[i].Value.ToString(); } 
} 

そしてnullセルを無視するcontinueを使用します。 AllowUserToAddRows = falseを使用してください。つまり、セルのnull値を保護しないように、ユーザーが行を追加しないようにする必要があります。