2012-07-02 42 views
0

我想在DropDownList的「eventnoteEditDrpDwnLst」的值設置爲在GridView中設置「可見= TRUE」到文本框「eventnoteAddTextBox」「自定義...」訪問內DropDownList.SelectedValue使用CommandArgument

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

這是行不通的。

回答

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; 
    } 
} 
+0

我不知道該如何將「CommandArgument」放在中。它應該是空的嗎?! – 84RR1573R

+0

它應該是空的,因爲你不想要一個靜態值,你想要在下拉列表中選擇的值。如果CommandArgument是一個按鈕或某個靜態值是發送者,但不帶下拉列表(除非您需要一些額外的值,除了所選項目中的值),那麼'CommandArgument'纔有意義。 –

+0

似乎它根本不起作用。看,我編輯了一下,以便更清楚。 – 84RR1573R

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!