2012-01-14 71 views
1

我想从代码隐藏的网格视图中获取隐藏字段的值,但不会用于_RowDataBound或任何其他类似的方法。这是我本次代码(它是一个购物车场景):从代码背后获取gridview值

<asp:GridView ID="gvShoppingCart" 
runat="server" 
AutoGenerateColumns="False" 
AllowPaging="True" 
DataKeyNames="ID" 
ShowFooter="true"> 
<Columns> 
    <asp:TemplateField> 
     <ItemTemplate> 
      <asp:HiddenField ID="lblProductID" runat="server" Text='<%# Eval("ProductID") %>' /> 
     </ItemTemplate> 
    </asp:TemplateField> 
    <asp:TemplateField HeaderText="Product"> 
     <ItemTemplate> 
      <asp:HyperLink ID="HyperLink1" runat="server" 
       NavigateUrl='<%# Eval("ProductID", "product_details.aspx?id={0}") %>' 
       Text='<%# GetProduct(Eval("ProductID")) %>'></asp:HyperLink> 
     </ItemTemplate> 
    </asp:TemplateField> 
    <asp:TemplateField HeaderText="Quantity"> 
     <ItemTemplate> 
      <asp:TextBox ID="txtQuantity" runat="server" Width="35" CssClass="input" onkeypress="return isNumberKey(event)" AutoPostBack="true" ontextchanged="txtQuantity_TextChanged"></asp:TextBox> 
     </ItemTemplate> 
    </asp:TemplateField> 
</Columns> 

为了简便起见,我删除了某些字段,因为它们的存在只为显示。数量字段用于用户输入数字以将许多产品添加到他的购物车。我想访问_TextChanged事件中的lblProductID标签。在这个同样的事件,我想

Label lblProductID = (Label)gvShoppingCart.FindControl("lblProductID");

,但它没有工作,只返回一个空值。解决办法是什么?

+0

如果您没有使用gridView事件,当您有几十个这样的控件时,如何知道返回哪个lblProductID。我建议你使用事件冒泡。使用RowCommand代替_TextChanged – Mubarek 2012-01-14 15:57:34

回答

1

对于您的GridView中的每一行,产品ID都有HiddenField

您可以通过使用下面的代码(假设你的HiddenField是在第一个单元格)访问行(第一行下面的例子)的HiddenField

HiddenField hiddenFieldProductID = 
      (HiddenField)gvShoppingCart.Rows[0].Cells[0].FindControl("lblProductID"); 

string productID = hiddenFieldProductID.Value 

// Do something with the value 

希望,这会有所帮助。

+0

那么他如何识别rowIndex呢?请记住,他不想使用网格事件 – Mubarek 2012-01-14 16:09:20

+0

@nuux:在TextChanged事件中,发件人引用TextBox控件。从那里你通过访问((控制)发件人)到控制行.Parent.Parent。 – Hans 2012-01-14 16:30:00

+0

@nuux:我刚刚看到你对这个问题的评论。当然,RowCommands也是一个选项。 – Hans 2012-01-14 16:31:23

0

尝试将HiddenField替换为标签或文本框,并将可见属性设置为false。 我以前试过这个,它的工作原理。