2013-07-30 55 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

对不起,我的坏阅读太快,更新了答案。 –

相关问题