添加列表查看项目到列表视图控件
我想从数据表中填充列表视图,但是当我运行代码时,我收到一个奇怪的错误,我找不出来。添加列表查看项目到列表视图控件
代码:
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)
它显示了正确的值,而不会触发错误....
没有什么明显错误的ListViewItem的;我怀疑错误是数据行中的某个字段名称不正确。
我检查,但所有的字段名称都是正确的,没有字段为空或空。当我用这行代替add时:MessageBox.Show(r [“track_number”]。ToString()+“”+ r [“track_name”]。ToString());它显示正确的数字+名称 – jhoevenaars
看起来,其中一个字段包含一个空值,将空值转换为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'
我试过这个,但它抛出了它以前所做的同样的错误,我认为他们可能是错误的lvTracks列表视图... – jhoevenaars
你检查了你的Listview'lvTracks'是不是null? bcoz向空对象添加任何东西都会引发错误。这可能会更加糟糕,但如果您的Listview是动态的,它可能会发生。尝试在if(lvtrack!= null)中编写代码 – Akshita
是的,这是错误(a),lvTracks是由我忘记调用的函数动态创建的 – jhoevenaars
而您正在调试代码时,您的代码行出现此错误? –
不知道是否是这样,但您可能想尝试一个foreach循环 - foreach(allRows.Rows中的DataRow r)。这将节省一些潜在的错误空间。 – Tom
我发现错误,似乎lvTracks还没有初始化:(dooo!代码现在正在工作;) – jhoevenaars