2016-11-04 14 views
1

私はできるだけ多くの参照と以前の質問を見てきましたが、私は答えを見つけることができないか、それを理解していないかもしれません。 、私が見たものからDataTable NullReferenceException

 if (dt.Rows.Count > 0) 

初期化していないとき、このエラーは、一般的にのみ発生します。しかし、私は下の行にSystem.NullReferenceExceptionを取得しています

public DataSet dsFilter = new DataSet(); 
    public DataTable dtFilter = new DataTable(); 

    public frmFilter() 
    { 
     InitializeComponent(); 
     cbFilter.SelectedIndex = 0; 
     this.dsFilter.Tables.Add(dtFilter); 
     this.dsFilter.Tables[0].TableName = "tr_filtered"; 
    } 

    public void SetupFilter() 
    { 
     lblRecs.Text = this.dsFilter.Tables["tr_filtered"].Rows.Count + "recs"; 
     LoadListBox("dma_name"); 
    } 

    public void LoadListBox(string colName) 
    { 
     DataTable dt = this.dsFilter.Tables["tr_filtered"]; 

     if (dt.Rows.Count > 0) 
     { 
      lbFilter.Items.Clear(); 
      for (int i = 0; i != dt.Rows.Count; i++) { lbFilter.Items.Add(dt.Rows[i][colName]); } 
      object[] items = new object[lbFilter.Items.Count]; 
      lbFilter.Items.CopyTo(items, 0); 
      lbFilter.Items.Clear(); 
      lbFilter.Items.AddRange(items.AsEnumerable().Distinct().ToArray()); 
     } 
    } 

:私は以下のコードを持っています私はDataTableとDataSetを正しく初期化していると思いました。私は明らかに私はそうではないと私は誰かが私を助けることができるか、少なくとも正しい方向に私を指すことを望んでいます。

+0

変更このするテスト: '場合(DT = NULL &&!このような何かを試してみてくださいdt.Rows.Count> 0) ' – jussij

+1

これはうまくいった!どうもありがとうございます!正直なところ、私はそれを捕らえたはずです。 – Jon

答えて

1

この主な理由は、このテーブルの列が定義されていないためです。列を追加して行を取得しアクセスする場合、行はnullになります。

dtFilter.TableName = "tr_filtered"; 
dtFilter.Columns.Add("column1"); 
dtFilter.Columns.Add("column2"); 
// add few colums as per the requirements 
dsFilter.Tables.Add(dtFilter); 

それとも、このようにしている、それらにアクセスする前に、行のexistanceを確認することができます:

if (dt.Rows != null && dt.Rows.Count > 0) 
+1

ありがとう、私は先に進み、テストを更新し、それは働いた! – Jon

関連する問題