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機能DataListRepeaterますListView

このより複雑な要件を検討してください。GridView別のにネストされたがありますGridViewSelectedIndexChangedこれで、子の内部にあるDropDownListのイベントを処理していて、親のGridViewへの参照を取得したいとします。GridViewRowGridView

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

それはそれを取得するための最も安全で簡単な方法です。

于 2012-10-24T10:15:01.833 に答える