将列表视图项添加到listview控件

时间:2011-12-02 08:47:11

标签: c# winforms listview

我正在尝试从数据表填充列表视图,但是当我运行代码时,我收到了一个我无法弄清楚的奇怪错误。

代码:

        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)

它显示正确的值,并且不会触发错误....

2 个答案:

答案 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'

相关问题