在转发器中获取DropDownList值

时间:2009-12-06 12:12:00

标签: c# .net asp.net drop-down-menu repeater

有以下标记代码:

ASPX页面

<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 个答案:

答案 0 :(得分:2)

谢谢大家,我使用了另一种方法:

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

在OnClick按钮事件处理程序中调用代码。

答案 1 :(得分:1)

也许这样的事情会起作用:

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

答案 2 :(得分:1)

使用'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而不是转发器。

答案 3 :(得分:1)

我认为你想要的是从RepeaterCommandEventArgs获取转发器行:

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

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

    System.Diagnostics.Debug.WriteLine(myDDL.SelectedValue);
}

答案 4 :(得分:0)

我使用网格做了一些事情,而datagrid有一个行数据绑定事件 How do I data bind a drop down list in a gridview from a database table using VB?

如果您在转发器上使用ItemDataBound事件,您还可以使用e.Item.ItemIndex获取索引

我不认为转发器有一个行数据绑定事件。

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