从asp.net中的转发器控件获取数据绑定值

时间:2011-08-15 14:26:17

标签: asp.net vb.net repeater

作为我的问题的后续跟进Looping through a repeater control to get values of Textbox in asp.net 如果用户在文本框中输入了数量,我想从转发器控件中获取相应的ProductID值:

<asp:Repeater ID="rptRequestForm" runat="server">
                    <HeaderTemplate>
                            <table border="0" width="100%">
                                <tr>
                                    <td style="width:50%" class="TextFontBold"><asp:Label runat="server" ID="Label1" Text="Supply Name"></asp:Label></td>
                                    <td style="width:25%" class="TextFontBold"><asp:Label runat="server" ID="Label2" Text="Quantity"></asp:Label></td>
                                    <td style="width:25%" class="TextFontBold"><asp:Label runat="server" ID="Label3" Text="Price (ea.)"></asp:Label></td>
                                </tr>
                            </table>
                    </HeaderTemplate>
                        <ItemTemplate>
                            <table border="0" width="100%">
                                <tr>
                                    <td style="width:50%" class="TextFont"><asp:Label ID="lblProductName" Text="<%#Trim(Eval("Product_Title"))%>" ><%#Trim(Eval("Supplie_title"))%></asp:Label></td>
                                    <td style="width:25%"><asp:TextBox ID="txtBox" runat="server" Width="30%" onblur="Javascript:numberonly(this)"></asp:TextBox></td>
                                    <td style="width:25%" class="TextFont"><span><%#Trim(FormatCurrency(Eval("Price")))%></span></td>
                                </tr>
                            </table>
                        </ItemTemplate>
                    </asp:Repeater> 

我的代码隐藏是:

For Each item As RepeaterItem In rptRequestForm.Items
                txtField = item.FindControl("txtBox")
                If Not IsNothing(txtField) Then
                    j += 1
                    strText = strText & ", " & txtField.Text
                End If
Next

我正在使用FindControl循环文本框(以查看用户是否输入了有效数量)。如何获取相应ProductID的值?

3 个答案:

答案 0 :(得分:1)

您可以将ProductId存储在转发器ItemTemplate中的hidden field中。然后,您可以使用相同的方式访问“产品ID”,因为您使用FindControl

访问数量

答案 1 :(得分:1)

为ItemTemplate添加标签,如下所示:

<td style="width:50%" class="TextFont"><asp:Label ID="lblProductName" runat="server"><%#Trim(Eval("Product_Title"))%></asp:Label></td>

在你的代码背后,找到它是这样的:

foreach (RepeaterItem item in Repeater1.Items)
{
    TextBox txtField = (TextBox)item.FindControl("txtBox");

    //extract value from textbox
    int Quantity = Convert.ToInt32(((TextBox)item.FindControl("txtBox").Text);

    //extract the value from the label
    string productName = ((Label)item.FindControl("lblProductName")).Text;
}

答案 2 :(得分:1)

您担心在没有数量的情况下获取产品名称,然后在分配之前进行评估。例如(基于@James的代码),您只需在IF Quantity > 0 THEN ...之前添加string productName = ...

我对该代码做了一些更改,但是......

1)在尝试将对象转换为文本框之前检查对象是否存在。例如,IF NOT item.FindControl("txtBox") is NOTHING...

2)在尝试convert.toint32()之前检查是否为空条件。例如,IF NOT string.isnullorempty(txtField)...

3)当您执行Quantity变量赋值时,您不需要FindControl,因为您已找到它(并将其分配给您的txtField变量)。所以只需int Quantity = Convert.ToInt32(txtField.Text);