2013-10-18 98 views
0

嘗試使用ASP.NET C#從我的DATAGRID中獲取單元格值,並且收到錯誤消息,指出「對象引用未設置爲對象的實例」。以下是我有:如何獲取DATAGRID中單元的值?

foreach (DataGridItem dgItem in dgPrintTicket.Items) 
{ 
    string itm = dgItem.Cells[1].FindControl("Item_Number").ToString(); 
} 

謝謝

回答

1

要克服錯誤的「不設置到對象的實例對象引用」使你的代碼空安全:

foreach (DataGridItem dgItem in dgPrintTicket.Items) 
{ 
    var control = dgItem.Cells[1].FindControl("Item_Number"); 

    string itm = control != null ? control.ToString() : null; 
} 

不過,我想你應該嘗試通過下面的代碼來獲取單元格的值:

foreach (DataGridItem dgItem in dgPrintTicket.Items) 
{ 
    string itm = dgItem.Cells[1].Text; 
} 

如果真的有被發現的FindControl控制使用此代碼片段:

foreach (DataGridItem dgItem in dgPrintTicket.Items) 
{ 
    var control = dgItem.Cells[1].FindControl("Item_Number") as Label; 

    string itm = control != null ? control.Text : null; 
} 
+0

確定修復了錯誤,但我無法從您提到的任何解決方案中獲得價值。當我調試第一個解決方案時,我可以看到「控制」變量中的值,但是當我將它分配給「itm」時,則該值顯示爲「System.Web.UI.WefControls.Label」而不是實際值。爲什麼? – hmakled

+0

control.ToString()方法顯示控件的默認類型。在你的情況下,這是「System.Web.UI.WefControls.Label」。可能你在control.Text屬性中找到了你的值,假設標籤包含你的值。這個單元中還有其他什麼控件? – abto

+0

嘗試了control.Text,但「文本」選項沒有顯示或顯示爲選項。我只能使用control.ToString()。它是我在ItemTemplates中的DataGrid中添加的Label控件。當我調試並將光標放在「control」變量上時,它表示control =「Text = F2140」,因此它找到控件和值,但由於某些奇怪的原因無法解壓。 – hmakled

1

dgItem.Cells [1] .FindControl( 「ITEM_NUMBER」)爲空,toString()方法是試圖空objecdt轉換爲字符串,它失敗。您需要確保:A)數據網格中至少有2列,並且B)FindControl(「Item_Number」)實際上會返回一些內容。

+0

是有4列,第二列是「Item_Number」。 DataGrid有3行數據,所以不知道發生了什麼。 – hmakled

相關問題