如何在asp.NET中实现嵌套的DropDownLists insid?

时间:2010-07-08 09:32:33

标签: c# asp.net gridview drop-down-menu

我有两个嵌套的DropDownLists(在第一个ddl中选择的值将限制第二个ddl的内容)。

此处附带的示例在GridView外部运行良好。一旦我尝试将其插入到GridView中,我就会收到错误,因为我无法识别要在ControlParameter中使用的ControlID。

GridView外部的代码如下所示:

<asp:DropDownList ID="ACTION1_DROPDOWNLIST"
    AutoPostBack="true" ToolTip="Dropdown List" runat="server" CssClass="Select" 
    DataSourceID="SqlDataSource1" DataTextField="Description" DataValueField="ID" >
    <asp:ListItem Value=""></asp:ListItem>
</asp:DropDownList>
<asp:DropDownList ID="ACTION1_DROPDOWNLIST2" 
    ToolTip="Dropdown List" runat="server" CssClass="Select" 
    DataSourceID="SqlDataSource2" DataTextField="Description" DataValueField="ID" >
    <asp:ListItem Value=""></asp:ListItem>
</asp:DropDownList>

DataSources看起来像这样:

<asp:Panel ID="HiddenFields" runat="server">
    <asp:TextBox ID="DRAFT" runat="server" Visible="false"></asp:TextBox>
    <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
        ConnectionString="<%$ ConnectionStrings:MyDataBase %>" 
        ProviderName="<%$ ConnectionStrings:MyDataBase.ProviderName %>" 
        SelectCommand="SELECT [ID], [Description] FROM [Items]">
    </asp:SqlDataSource>
    <asp:SqlDataSource ID="SqlDataSource2" runat="server" 
        ConnectionString="<%$ ConnectionStrings:MyDataBase %>" 
        ProviderName="<%$ ConnectionStrings:MyDataBase.ProviderName %>" 
        SelectCommand="SELECT [ID], [Description] FROM [SubItems] WHERE [itemId]=:v_ItemId">
        <SelectParameters>
            <asp:ControlParameter Name="v_ItemId" ControlID="ACTION1_DROPDOWNLIST" PropertyName="SelectedValue" />
        </SelectParameters>
    </asp:SqlDataSource>
</asp:Panel>

谢谢!

2 个答案:

答案 0 :(得分:1)

我尝试过类似的东西,但效果很好。我无法从您的帖子中看出数据源是否与GridView的ItemTemplate中的下拉列表一起。至少第二个应该在ItemTemplate中,这样你就可以为网格中的每一行提供一个数据源。

我已在下面发布了我的页面。它使用不同的表,但它的想法是一样的。

<form id="form1" runat="server">
<div>
    <asp:GridView ID="GridView1" runat="server" DataSourceID="SqlDataSource1">
        <Columns>
            <asp:TemplateField>
                <ItemTemplate>
                    <asp:DropDownList ID="ACTION1_DROPDOWNLIST" 
                        AutoPostBack="true" ToolTip="Dropdown List" runat="server" CssClass="Select"  
                        DataSourceID="SqlDataSource1" DataTextField="Surname" DataValueField="FamilyID" > 
                        <asp:ListItem Value=""></asp:ListItem> 
                    </asp:DropDownList> 
                    <asp:DropDownList ID="ACTION1_DROPDOWNLIST2"  
                        ToolTip="Dropdown List" runat="server" CssClass="Select"  
                        DataSourceID="SqlDataSource2" DataTextField="Name" DataValueField="PersonID" > 
                        <asp:ListItem Value=""></asp:ListItem> 
                    </asp:DropDownList>
                    <asp:Panel ID="HiddenFields" runat="server"> 
                        <asp:TextBox ID="DRAFT" runat="server" Visible="false"></asp:TextBox> 
                        <asp:SqlDataSource ID="SqlDataSource2" runat="server"  
                            ConnectionString="<%$ ConnectionStrings:tunedinConnectionString %>"  
                            ProviderName="<%$ ConnectionStrings:TunedInConnectionString2.ProviderName %>"  
                            SelectCommand="SELECT * FROM [Person] WHERE ([FamilyId] = @FamilyId)"> 
                            <SelectParameters> 
                                <asp:ControlParameter Name="FamilyId" ControlID="ACTION1_DROPDOWNLIST" 
                                    PropertyName="SelectedValue" Type="Int32" /> 
                            </SelectParameters> 
                        </asp:SqlDataSource> 
                    </asp:Panel>
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView>
    <asp:LinqDataSource ID="LinqDataSource1" runat="server">
    </asp:LinqDataSource>
</div>
<asp:SqlDataSource ID="SqlDataSource1" runat="server"  
    ConnectionString="<%$ ConnectionStrings:tunedinConnectionString %>"  
    ProviderName="<%$ ConnectionStrings:TunedInConnectionString2.ProviderName %>"  
    SelectCommand="SELECT * FROM [Family]"> 
</asp:SqlDataSource> 
</form>

答案 1 :(得分:0)

实际的id是根据它们的位置构建的,所以你会在id中看到类似$ GridView1的东西。 要解决此问题,您可以在页面属性(.aspx文件的第一行)上设置ClientIDMode="Static"。 或者使用"javascript:var a = document.getElementById('" + ACTION1_DROPDOWNLIST.ClientID + "');