Frank
Frank

Reputation: 2045

Getting the databound value from repeater control in asp.net

As a follow up to my question Looping through a repeater control to get values of Textbox in asp.net If user has entered a a quantity in the textbox, I want to get the corresponding ProductID value from the repeater control:

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

My codebehind is:

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

I am using FindControl to loop through the textbox (to see if user has entered a valid quantity). How can I get the value of the corresponding ProductID ?

Upvotes: 3

Views: 8474

Answers (3)

Muhammad Akhtar
Muhammad Akhtar

Reputation: 52241

You can store the ProductId in a hidden field in the repeater ItemTemplate. Then You can access the Product Id in the same way, as you are accessing the quantity using FindControl

Upvotes: 1

Chains
Chains

Reputation: 13157

You're worried about getting product names where there is no quantity, then just evaluate before you assign. For example (based on @James' code), you just add IF Quantity > 0 THEN ... before you do string productName = ...

A couple of changes I'd make to that code, though...

1) check for the object to exist before you attempting to convert it to a textbox. For example, IF NOT item.FindControl("txtBox") is NOTHING...

2) check for a null condition before you attempt convert.toint32(). for example, IF NOT string.isnullorempty(txtField)...

3) When you do the Quantity variable assignment, you don't need FindControl, because you already found it (and assigned it to your txtField variable). So just int Quantity = Convert.ToInt32(txtField.Text);

Upvotes: 1

James Johnson
James Johnson

Reputation: 46047

Add a label to your ItemTemplate, like this:

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

And in your code behind, find it like this:

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;
}

Upvotes: 2

Related Questions