#.net #asp.net #vb.net #drop-down-menu #repeater
#.net #asp.net #vb.net #выпадающее меню #повторитель
Вопрос:
У меня есть label
и dropdownlist
внутри repeater
. Когда я нажимаю кнопку вне ретранслятора, я хотел бы получить доступ к label.Text
значению и ddl.SelectedIndex
value.
<asp:Repeater ID="rptProduct" runat="server" DataSourceID="objdsProduct" OnItemCommand="rptProduct">
<ItemTemplate>
<div>
<div>
<asp:Label ID="lblProdName" runat="server" Text='<%# Eval("ProductName") %>'></asp:Label>
</div>
<div>
<asp:DropDownList ID="ddlSize" runat="server" AutoPostBack="False" DataSourceID="objdsSize" DataTextField="SizeName" AppendDataBoundItems="True" DataValueField="SizeID">
<asp:ListItem Text="select a size" Value=0></asp:ListItem>
</asp:DropDownList>
</div>
</ItemTemplate>
</asp:Repeater>
<asp:Button ID="btnChoose" runat="server" Text="Choose Products" />
Любые предложения, как я могу получить доступ к lblProdName.Text
и ddlSize.SelectedValue
внутри:
Protected Sub btnChoose_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnChoose.Click
Dim ProductName
Dim Size
End Sub
Спасибо, что уделили мне время.
Ответ №1:
Добавьте это в свой щелчок по кнопке:
Dim item As RepeaterItem
For Each item In rptProduct.Items
Dim ProductName As String = DirectCast(item.FindControl("lblProdName"), Label).Text
Dim Size As Integer = (DirectCast(item.FindControl("ddlSize"), DropDownList).SelectedValue
Next item
Ответ №2:
Dim ProductName As String = DirectCast(rptProduct.FindControl("lblProductName"), Label).Text
Dim Size As Integer = DirectCast(rptProduct.FindControl("ddlSize"), DropDownList).SelectedValue
Но … как вы собираетесь определить, из какого элемента в ретрансляторе вы хотите получить значения?
Взгляните на эту страницу MSDN, в частности, на этот фрагмент:
Sub R1_ItemCommand(Sender As Object, e As RepeaterCommandEventArgs)
Label2.Text = "Button " amp; _
Repeater1.Items(e.Item.ItemIndex).ItemIndex.ToString() amp; _
" has just been clicked! <br />"
End Sub
Комментарии:
1. Ну, я бы прошелся по каждому продукту, который я показываю? Итак, Product 1 lblName и ddlSize, Product 2 и т.д.
2. Я также получаю следующую ошибку: ссылка на объект не установлена для экземпляра объекта.
3. в этом случае вам просто нужно изменить rptProduct. Найдите элемент управления. Пример цикла проверки FindControl для ретранслятора здесь: msdn.microsoft.com/en-us/library /…
4. Я могу добавлять только элементы, а не Item?
Ответ №3:
Вам нужно перебирать строки повторителя….
protected void btnChoose_Click(object sender, EventArgs e)
{
foreach (RepeaterItem item in Repeater1.Items)
{
Label lblProdName = item.FindControl("lblProdName") as Label;
lblProdName.Text .........
DropDownList ddlSize = item.FindControl("ddlSize") as DropDownList;
ddlSize.SelectedValue .........
}
}
Комментарии:
1. Команда
Item.FindControl
не распознана, толькоItems
2. Его код на C #, я думаю, что FindControl эквивалентен в vb.net является ли DirectCast, это то, что вы должны принять в ответ. В приведенном выше коде нет ничего неправильного, если вы пытаетесь на C#