2011-12-02 152 views
0

我想从数据表中填充列表视图,但是当我运行代码时,我收到一个奇怪的错误,我找不出来。添加列表查看项目到列表视图控件

代码:

 DataTable allTracks = tracks.getByMedia(); 

     for (int i = 0; i < allTracks.Rows.Count; i++) { 
      DataRow r = allTracks.Rows[i]; 

      ListViewItem lvi = new ListViewItem(); 
      lvi.Text = r["track_number"].ToString(); 
      lvi.SubItems.Add(r["track_name"].ToString()); 

      lvTracks.Items.Add(lvi); 
     } 

错误:

Object reference not set to an instance of an object. 

该方案认为,LVI变量未设置或为空,但是当我进入调试模式,我可以看到,LVI是definitly初始化和设置,并包含

right text + sub item . :S 

此外,如果我把这个,而不是

lvTracks.Items.Add(lvi); 
Messagebox.Show(lvi.Text) 

它显示了正确的值,而不会触发错误....

+0

而您正在调试代码时,您的代码行出现此错误? –

+0

不知道是否是这样,但您可能想尝试一个foreach循环 - foreach(allRows.Rows中的DataRow r)。这将节省一些潜在的错误空间。 – Tom

+0

我发现错误,似乎lvTracks还没有初始化:(dooo!代码现在正在工作;) – jhoevenaars

回答

1

没有什么明显错误的ListViewItem的;我怀疑错误是数据行中的某个字段名称不正确。

+0

我检查,但所有的字段名称都是正确的,没有字段为空或空。当我用这行代替add时:MessageBox.Show(r [“track_number”]。ToString()+“”+ r [“track_name”]。ToString());它显示正确的数字+名称 – jhoevenaars

0

看起来,其中一个字段包含一个空值,将空值转换为String Throws错误。

我不认为ListViewItem的是在任何情况下,空beacuase它得到intantiated环路

每次尝试

DataTable allTracks = tracks.getByMedia(); 

    foreach(DataRow r in allTracks.Rows) { 

     string track_number= r["track_number"]!=System.DBNull.Value?r["track_number"].ToString():""; 
     string track_name=r["track_name"]!=System.DBNull.Value?r["track_name"].ToString():""; 
     ListViewItem lvi = new ListViewItem(); 
     lvi.Text = track_number; 
     lvi.SubItems.Add(track_name); 
     if(lvTracks!=null) 
     { 
     lvTracks.Items.Add(lvi); 
     } 
    } 

请注意,存在两种不同的空 一个用于.NET CLR,这是“ null',而另一个数据库是'Syatem.DBNull.Value'

+0

我试过这个,但它抛出了它以前所做的同样的错误,我认为他们可能是错误的lvTracks列表视图... – jhoevenaars

+1

你检查了你的Listview'lvTracks'是不是null? bcoz向空对象添加任何东西都会引发错误。这可能会更加糟糕,但如果您的Listview是动态的,它可能会发生。尝试在if(lvtrack!= null)中编写代码 – Akshita

+0

是的,这是错误(a),lvTracks是由我忘记调用的函数动态创建的 – jhoevenaars