Получение значений DropDownList в повторителе - PullRequest
2 голосов
/ 06 декабря 2009

Существует следующий код разметки:

ASPX Page

<asp:Repeater ID="GeneralRepeater" runat="server" 
 OnItemDataBound="GeneralRepeater_OnItemDataBound">
   <ItemTemplate>
     <tr>
      <td>
       Place:
         <asp:DropDownList ID="GeneralDDL" DataTextField="Text" 
              DataValueField="Arena" runat="server" />
     </td>
     <th>
       <asp:Button ID="GeneralButton" runat="server" 
            Text="Принять запрос" onclick="GeneralButton_Click" />
    </th>
    </tr>
   </ItemTemplate>
</asp:Repeater>

Код-за

protected void GeneralRepeater_OnItemDataBound(object sender, 
                                               RepeaterItemEventArgs e)
{
     if (e.Item.ItemType == ListItemType.Item || 
         e.Item.ItemType == ListItemType.AlternatingItem)
     {
         DropDownList myDDL = (DropDownList)e.Item.FindControl("GeneralDDL");
         myDDL.DataSource = lstArenaSelect;
         myDDL.DataBind();

         MyObject obj= (MyObject)e.Item.DataItem;
         Button GeneralButton = (Button)e.Item.FindControl("GeneralButton");
         AcceptGeneralRequestButton.CommandArgument = obj.Id;
     }
}

Показывает инициализацию каждого DropDownList со списком объектов, и каждая кнопка в строке ссылается на объект строки.

В методе GeneralButton_Click я могу получить ID объекта, привязанного к повторителю.

Вопрос

Как получить значение из DropDownList, расположенного в том же ряду повторителей?

Ответы [ 5 ]

2 голосов
/ 08 декабря 2009

Спасибо за все, я использовал другой подход:

Control parent = ((Control)sender).Parent;
DropDownList GeneralDDL = (DropDownList)parent.FindControl("GeneralDDL");

Код вызывается в обработчике событий кнопки OnClick.

1 голос
/ 07 декабря 2009

Я думаю, что вы хотите получить строку повторителя из RepeaterCommandEventArgs:

protected void MyRepeater_ItemCommand(object source, RepeaterCommandEventArgs e)
{
    DropDownList myDDL;

    myDDL = (DropDownList) e.Item.FindControl("GeneralDDL");

    System.Diagnostics.Debug.WriteLine(myDDL.SelectedValue);
}
1 голос
/ 06 декабря 2009

Используйте элемент 'Items' и предоставленный индекс элемента.

См ... http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.repeater.items.aspx для примеров.

В основном ...

DropDownList currDDL = GeneralRepeater.Items[currButtonItemIndex].FindControl('GeneralDDL') as DropDownList;

или

DropDownList currDDL = GeneralRepeater.Items[e.Item.ItemIndex].FindControl('GeneralDDL') as DropDownList;

В случае обработчика событий.

PS. Если вы можете, используйте ListView вместо повторителя.

1 голос
/ 06 декабря 2009

Может быть, что-то вроде этого будет работать:

protected void GeneralButton_Click(object sender, EventArgs e)
{
    Button myGeneralButton = (Button)sender;
    DropDownList myDDL = (DropDownList) myGeneralButton.NamingContainer.FindControl("GeneralDDL");

    // myDDL.SelectValue should be what you are looking for.
}
0 голосов
/ 06 декабря 2009

Я что-то сделал с сетками, и у сетки данных есть событие, связанное с строкой данных Как связать данные в раскрывающемся списке в виде таблицы из таблицы базы данных, используя VB?

если вы используете событие ItemDataBound в ретрансляторе, вы также можете получить индекс, используя e.Item.ItemIndex

Я не думаю, что у ретранслятора есть событие с привязкой к строке.

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.repeater_events.aspx

...