2013-11-04 52 views
0

我有一個數據源被另一個類訪問。我使用此數據源在頁面加載事件中填充我的組合框。我已經到了我的方法正在從selectedindexchanged事件訪問數據庫的地步。它給了我錯誤:對象引用未設置爲對象的實例。我使用斷點來查看它失敗的位置。令我驚訝的是它正在收集第一行數據(不是我選擇的那一行),然後它通過breakpoit並給出錯誤消息。爲什麼這樣做是因爲之前有數據? 我的組合框填充方法如何使用selectedindexchanged方法訪問數據庫

try 
     { 
      List<PreviousVersionData> listID = PreviousVersionData.getDatabase(); 
      if (listID != null) 
      { 
       foreach (PreviousVersionData l in listID) 
       { 
        cmboBoxPreviousVersion.Items.Add(l.FormatID.ToString() + " - " + l.FormatName); 

       } 
      } 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 

下面是問題的癥結所在,它讓我對我設置斷點錯誤Item.FormatID = data.FormatID;

if (cmboBoxPreviousVersion.SelectedItem != null) 
     { 
      PreviousVersionData data = new PreviousVersionData(); 

      PreviousVersionData pvdata = new PreviousVersionData(); 
      data = pvdata.getDataByID(cmboBoxPreviousVersion.SelectedItem.ToString()); 

      Item.FormatID = data.FormatID; 
      Item.FormatName = data.FormatName; 
      Item.FormatDescription = data.FormatDescription; 
      Item.StockID = data.StockID; 
      Item.PrintPlantCode = (bool)data.PrintPlantCode; 
      Item.PrintWeight = (bool)data.PrintWeight; 
      Item.PrintPrice = (bool)data.PrintPrice; 

      rChkBoxPlantCode.Checked = Item.PrintPlantCode; 
      rChkBoxPrintPrice.Checked = Item.PrintPrice; 
      rChkBoxWeight.Checked = Item.PrintWeight; 
      cmboBoxStock.Items.Add(Item.StockID); 
      rTxtBoxDescription.Text = Item.FormatDescription; 
     } 

我是新來使用一個類的數據庫訪問我總是教導使用嚮導。有沒有更好的方法將這些信息存入我的領域或者我只是在某處丟失某些東西?感謝您的幫助。如果您需要澄清,請告訴我!

+0

您正在將字符串放入組合框,然後使用一個這樣的字符串從數據庫檢索數據。爲此使用密鑰不是更合乎邏輯嗎? 除此之外,您正在實例化數據,只能用pvdata.getDataById()覆蓋它。這似乎幾乎沒有必要:) 錯誤seesm來自數據我snull的事實,這意味着你沒有找到任何東西在你的數據庫中的KEY等於一些連接的字符串。這似乎並不令人驚訝。 這就是說,我不知道什麼Item是,也可能是null :) – oerkelens

+0

trace getDataByID。它看起來數據是空的。如果你想從getDataByID獲取數據,那麼沒有理由獲得新數據。爲什麼要使用PreviousVersionData類來獲取DataByID而不是靜態方法? – Paparazzi

+0

@Blam無經驗 – CharmingInferno

回答

1

如果您在此處FormatIDnull,您將會收到此錯誤。 ToString()方法不能針對null參考執行。

cmboBoxPreviousVersion.Items.Add(l.FormatID.ToString() + " - " + l.FormatName); 

這可能不是你想要的要多,但維護代碼:

cmboBoxPreviousVersion.Items.Add(
    string.Format("{0} - {1}", l.FormatID, l.FormatName)); 

但是,你也需要找出原因FormatIDnull這裏。

+0

@nepistheone我明白爲什麼它在這裏是空的我只是不知道如何糾正它 – CharmingInferno

+0

@CharmingInferno,問題出現在'PreviousVersionData.getDatabase'中。您需要調試該代碼並找出爲什麼'FormatID'獲得'null'值。 –