2013-07-30 75 views
0

我有一個gridview在其中一個單元格中使用下拉列表填充。 這裏是GridView控件代碼:在GridView單元格中獲取選定的DropDownList的行

<asp:GridView ID="viewThemeTypeAssociationsGridView" runat="server" AutoGenerateColumns="False" BackColor="#DEBA84" BorderColor="#DEBA84" BorderStyle="None" BorderWidth="1px" CellPadding="3" CellSpacing="2" DataSourceID="SqlDataSource6" OnRowDataBound="viewThemeTypeAssociationsGridView_OnRowDataBound"> 
     <Columns> 
      <asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name" /> 
      <asp:BoundField DataField="Type" HeaderText="Type" SortExpression="Type" /> 
      <asp:TemplateField HeaderText="Choose Theme Type"> 
        <ItemTemplate> 
         <asp:DropDownList ID="chooseThemeTypeDropDown" runat="server" DataTextField="Type" DataValueField="PK_ThemeType" AutoPostBack="true" DataSourceID="SqlDataSource9" CssClass="dropDownList" OnDataBound="chooseThemeTypeDropDown_OnDataBound" Visible="false" OnSelectedIndexChanged="chooseThemeTypeDropDown_OnSelectedIndexChanged">      </asp:DropDownList> 
         <asp:SqlDataSource ID="SqlDataSource9" runat="server" ConnectionString="<%$ ConnectionStrings:ApplicationServices %>" 
           SelectCommand="SELECT [Type], [PK_ThemeType] FROM [ThemeType] WHERE [Deleted] = 0 ORDER BY [Type] ASC"> 
         </asp:SqlDataSource> 
        </ItemTemplate> 
      </asp:TemplateField> 
     </Columns> 
     <FooterStyle BackColor="#F7DFB5" ForeColor="#8C4510" /> 
     <HeaderStyle BackColor="#A55129" Font-Bold="True" ForeColor="White" /> 
     <PagerStyle ForeColor="#8C4510" HorizontalAlign="Center" /> 
     <RowStyle BackColor="#FFF7E7" ForeColor="#8C4510" /> 
     <SelectedRowStyle BackColor="#738A9C" Font-Bold="True" ForeColor="White" /> 
     <SortedAscendingCellStyle BackColor="#FFF1D4" /> 
     <SortedAscendingHeaderStyle BackColor="#B95C30" /> 
     <SortedDescendingCellStyle BackColor="#F1E5CE" /> 
     <SortedDescendingHeaderStyle BackColor="#93451F" /> 
    </asp:GridView> 
    <asp:SqlDataSource ID="SqlDataSource6" runat="server" ConnectionString="<%$ ConnectionStrings:ApplicationServices %>" 
     SelectCommand="SELECT [Theme].[Name], [ThemeType].[Type] FROM [Theme] LEFT OUTER JOIN [ThemeType] ON [Theme].[ThemeTypeId] = [ThemeType].[PK_ThemeType] JOIN [ProductTheme] ON [ProductTheme].[ThemeId]=[Theme].[PK_Theme] WHERE ProductTheme.ProductID LIKE @productParam AND ProductTheme.ThemeId = Theme.PK_Theme AND COALESCE([THEME].[THEMETYPEID], 'null') LIKE @assignedParam GROUP BY [Theme].[Name], [ThemeType].[Type] ORDER BY CASE WHEN [ThemeType].[Type] IS NULL THEN 0 ELSE 1 END, [Theme].[Name]"> 
     <SelectParameters> 
      <asp:QueryStringParameter Name="productParam" Type="String" /> 
      <asp:QueryStringParameter Name="assignedParam" Type="String" /> 
     </SelectParameters> 
    </asp:SqlDataSource> 

這裏是填充細胞的下拉列表中的代碼:

protected void viewThemeTypeAssociationsGridView_OnRowDataBound(Object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     if (e.Row.Cells[1].Text == "&nbsp;") 
     { 
      e.Row.Cells[1].Text = "Not Assigned"; 
      DropDownList chooseThemeTypeDropDown = (DropDownList)e.Row.FindControl("chooseThemeTypeDropDown"); 
      chooseThemeTypeDropDown.Visible = true; 
     } 
    } 
} 

我不僅需要對數據訪問的選擇下拉列表鍵值而且這它在上面。以下是我迄今爲止:

protected void chooseThemeTypeDropDown_OnSelectedIndexChanged(object sender, EventArgs e) 
{ 
    DropDownList chooseThemeTypeDropDown = sender as DropDownList; 
    if (chooseThemeTypeDropDown != null) 
    { 
     System.Diagnostics.Debug.WriteLine(chooseThemeTypeDropDown.SelectedItem.Value.ToString()); 

    } 
} 

上述方法沒有做任何事情特別讓我只是想獲得的值。我正在獲取數據鍵值,但是如何獲取它所在的行?

回答

1

您可以找到您的下拉列表中的祖父母(.Parent.Parent)找到網格視圖行,因爲下拉列表是行,這是該行本身的一部分的細胞內,因此您需要去兩級,如下:

protected void chooseThemeTypeDropDown_OnSelectedIndexChanged(object sender, EventArgs e) 
{ 
    DropDownList chooseThemeTypeDropDown = sender as DropDownList; 
    if (chooseThemeTypeDropDown != null) 
    {  
     System.Diagnostics.Debug.WriteLine(chooseThemeTypeDropDown.SelectedItem.Value.ToString()); 
     GridViewRow row = (GridViewRow)chooseThemeTypeDropDown.Parent.Parent; 
    } 
} 
+0

使用EventArgs e參數時行不可用。當我將方法更改爲GridViewRowEventArgs e以使行可用時,出現以下錯誤:CS0123:沒有爲'chooseThemeTypeDropDown_OnSelectedIndexChanged'重載匹配委託'System.EventHandler' – endr3am

+0

對不起,我的壞閱讀太快,更新了答案。 –

相關問題