Вызов кнопки или выпадающего списка внутри ретранслятора

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