2

我有一个 asp.net 网格视图。下拉列表类型的模板字段包含在列中:

<asp:TemplateField HeaderTextLabel="strManagedOETeamart">
                        <ItemTemplate>
                            <asp:DropDownList runat="server" AutoPostBack="True" OnSelectedIndexChanged="SelectedTeamartChanged">
                                <asp:ListItem Selected="True" Value="White"> White </asp:ListItem>
                                <asp:ListItem Value="Silver"> Silver </asp:ListItem>
                                <asp:ListItem Value="DarkGray"> Dark Gray </asp:ListItem>
                                <asp:ListItem Value="Khaki"> Khaki </asp:ListItem>
                                <asp:ListItem Value="DarkKhaki"> Dark Khaki </asp:ListItem>
                            </asp:DropDownList>
                        </ItemTemplate>
                    </asp:TemplateField>

当用户选择另一个项目时,如何获取 GridViewRow?

    protected void SelectedTeamartChanged(object sender, EventArgs e)
    {
        DropDownList dropDown = (DropDownList) sender;
        //I would like to know the GridViewRow this DropDownList is in

    }
4

1 回答 1

1

您正在寻找的NamingContainer财产:

GridViewItem row = (GridViewRow)dropDown.NamingContainer;

顺便说一句,这适用于任何类型的 Web 数据绑定控件,例如GridView、或.DataListRepeaterListView

考虑这个更复杂的要求:你有一个GridView嵌套在另一个中的GridView。现在您正在处理一个 DropDownList 的SelectedIndexChanged事件,它位于孩子的内部,GridView并且您想要获取对GridViewRowparent的引用GridView

var control = (Control)sender;
var row = (GridViewRow)control.NamingContainer;
var parentRow = (GridViewRow)row.NamingContainer.NamingContainer;

这是获得它的最安全和最简单的方法。

于 2012-10-24T10:15:01.833 回答