我正在尝试从数据表填充列表视图,但是当我运行代码时,我收到了一个我无法弄清楚的奇怪错误。
代码:
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变量未设置或为null,但是当我进入调试模式时,我可以看到lvi被定义初始化并设置并且包含
right text + sub item . :S
此外,如果我把它改为
lvTracks.Items.Add(lvi);
Messagebox.Show(lvi.Text)
它显示正确的值,并且不会触发错误....
答案 0 :(得分:1)
listviewitem没有任何明显的错误;我怀疑错误是数据行中的某个字段名称不正确。
答案 1 :(得分:0)
似乎其中一个字段包含空值,因为将空值转换为String引发错误。
我不认为Listviewitem在任何情况下都是空的beacuase它每次在循环中被实例化
尝试
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);
}
}
请注意,存在两个不同的null 一个用于.Net CLR,这是'null',另一个用于数据库'Syatem.DBNull.Value'