Reputation: 2045
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
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
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
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