2013-04-25 40 views
1

我正在使用datalist顯示產品ID,名稱和文本框(「數量」)允許用戶輸入訂單數量。我得到System.NullReferenceException:當用戶單擊要訂購的項目時,對象引用未設置爲對象錯誤的實例。我的數據源只提供2列(產品ID和名稱)。我向數據專家添加了一個文本框(「數量」)和一個按鈕。我無法從文本框中獲取值(「數量」)來提交。難道它是我的數據源不包含「數量」列,因此FindControl總是返回空值?我如何解決這個問題?謝謝。這裏是我的代碼:如何從datalist獲取文本框的值?

<asp:DataList ID="DataList1" runat="server" CellPadding="10" DataKeyField="product_id" DataSourceID="SqlDataSource1" RepeatColumns="2"> 
<ItemTemplate> 
    <asp:Label ID="product_id" runat="server" 
    Text='<%# Eval("product_id") %>' /><br/> 
    <asp:Label ID="product_name" runat="server" 
    Text='<%# Eval("product_name") %>' /> 
<br /> 

<asp:TextBox ID="Qty" runat="server"></asp:TextBox> 
<asp:Button ID="ButtonAddToCart" runat="server" Text="Add to Cart" CommandName="addtocart2" OnCommand="DataList1_ItemCommand" 
    /> 
</ItemTemplate> 
</asp:DataList> 

下面是按鈕的代碼:

public void DataList1_ItemCommand(object source, System.Web.UI.WebControls.CommandEventArgs e) 

{ 
var qtytxtbox = DataList1.FindControl("Qty") as TextBox; 
// qtytxtbox always return null, why? 

} 

回答

0

你處理不完全正確。你應該使用DataListCommandEventArgs作爲第二個參數。所以嘗試這樣的事情

標記:

<asp:DataList ID="DataList1" runat="server" OnItemCommand="DataList1_ItemCommand" vCellPadding="10" DataKeyField="product_id" DataSourceID="SqlDataSource1" RepeatColumns="2"> 

然後在按鈕

<asp:Button ID="ButtonAddToCart" runat="server" Text="Add to Cart" CommandName="addtocart2" /> 

和代碼添加命令名稱後面

public void DataList1_ItemCommand(object source, DataListCommandEventArgs e) 
{ 
    if(e.CommandName.Equals("addtocart2") 
    { 
    TextBox qtytxtbox = (TextBox)(e.Item.FindControl("Qty")); 
    } 
} 
+0

我CS0123:爲 'DataList1_ButtonAddToCartCommand' 不超載在使用代碼時與委託「System.Web.UI.WebControls.CommandEventHandler」匹配。 – user1698255 2013-04-25 01:30:23

+0

確保'DataList1_ButtonAddToCartCommand'具有同名的兩個位置,即標記和後面的代碼。看看這裏http://www.codeproject.com/Questions/217748/DataList1_ItemCommand-not-raised – Sachin 2013-04-25 01:34:29

+0

現在我得到了CS0123:沒有重載'DataList1_ItemCommand'匹配委託'System.Web.UI.WebControls.CommandEventHandler'後驗證在上面的代碼中,我在這兩個地方都有DataList1_ItemCommand。 – user1698255 2013-04-25 01:57:22