0

DropDownList「eventnoteEditDrpDwnLst」の値を「Custom...」に設定した場合、GridViewのTextBox「eventnoteAddTextBox」に「Visible=true」を設定したい

<asp:GridView ID="grid" runat="server"
...
    OnRowCommand="grid_RowCommand"
    ShowFooter="True">
<columns>
...
<asp:TemplateField HeaderText="Event">
<ItemTemplate>
    <asp:Label ID="eventnoteLbl" runat="server" Text='<%# Bind("eventnote") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
    <asp:DropDownList ID="eventnoteEditDrpDwnLst" runat="server" DataTextField="eventnote" DataValueField="eventnote"></asp:DropDownList>
</EditItemTemplate>
<FooterTemplate>
    <asp:DropDownList ID="eventnoteAddDrpDwnLst" runat="server" DataTextField="eventnote" DataValueField="eventnote" CommandName="AddCustomEventNote" CommandArgument="<%# ??? eventnoteAddDrpDwnLst.SelectedText ??? %>"></asp:DropDownList>
    <asp:UpdatePanel ID="eventnoteAddUpdatePanel" runat="server" RenderMode="Block">
    <ContentTemplate>
        <asp:TextBox ID="eventnoteAddTextBox" runat="server" DataTextField="eventnote" DataValueField="eventnote" Visible="False"></asp:TextBox>
    </ContentTemplate>
    </asp:UpdatePanel>
</FooterTemplate>
</asp:TemplateField>
...
</columns>
</asp:GridView>

コードビハインド

protected void grid_RowCommand(object sender, GridViewCommandEventArgs e)
{
    if (e.CommandName.Equals("AddCustomEventNote"))
    {
        DropDownList eventnoteAddDrpDwnLst = (DropDownList)e.CommandSource;
        if (eventnoteAddDrpDwnLst.SelectedValue == "Custom...")
            Response.Write("<script>alert('It works!');</script>");
            //grid.FooterRow.FindControl("eventnoteAddTextBox").Visible = true;
    }
}

これはうまくいきません。

4

2 に答える 2

1

これでできるはず

protected void grid_RowCommand(object sender, GridViewCommandEventArgs e)
{
    if (e.CommandName.Equals("AddCustomEventNote"))
    {
        DropDownList eventnoteAddDrpDwnLst = (DropDownList)grid.FooterRow.FindControl("eventnoteAddDrpDwnLst");

        string value = eventnoteAddDrpDwnLst.SelectedValue;
    }
}
于 2012-07-02T00:57:14.687 に答える
0

実際には、AutoPostBack と の別の呼び出し関数が必要です<asp:DropDownList>。カバーすることもできるので、<asp:UpdatePanel RenderMode="Block">スムーズ<asp:ScriptManager EnablePartialRendering="true">に行動できます。

<asp:DropDownList ID="eventnoteAddDrpDwnLst" runat="server" DataTextField="eventnote" DataValueField="eventnote" AutoPostBack="true" OnSelectedIndexChanged="eventnoteAddDrpDwnLst_SelectedIndexChanged" />

コード ビハインドは次のように簡単です。

protected void eventnoteAddDrpDwnLst_SelectedIndexChanged(object sender, EventArgs e)
    {
        DropDownList eventnoteAddDrpDwnLst = (DropDownList)grid.FooterRow.FindControl("eventnoteAddDrpDwnLst");
        if (eventnoteAddDrpDwnLst.SelectedValue == "Custom...")
            grid.FooterRow.FindControl("eventnoteAddTextBox").Visible = true;
        else
            grid.FooterRow.FindControl("eventnoteAddTextBox").Visible = false;
    }

それは実際に動作します!DropDownList には CommandArgument がありません!

于 2012-07-02T14:35:45.540 に答える