2011-12-02 203 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