如何从datalist获取文本框值?

时间:2013-04-25 00:51:32

标签: c# asp.net datalist findcontrol

我使用datalist来显示产品ID,名称和文本框(“数量”)允许用户输入订单数量。我得到System.NullReferenceException:当用户单击要订购的项目时,对象引用未设置为对象错误的实例。我的数据源仅提供2列(产品ID和名称)。我在数据列表中添加了一个文本框(“数量”)和一个按钮。我无法从文本框(“数量”)中获取值来提交。可能是我的数据源不包含“Qty”列,因此FindControl总是返回null值?我该如何解决这个问题?谢谢。这是我的代码:

<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?

}

1 个答案:

答案 0 :(得分: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"));
  }
}