【问题标题】:How to implement nested DropDownLists insid a GridView in asp.NET?如何在 asp.NET 的 GridView 中实现嵌套的下拉列表?
【发布时间】:2010-07-08 09:32:32
【问题描述】:

我有两个嵌套的 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>

DataSource 看起来像这样:

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

谢谢!

【问题讨论】:

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


    【解决方案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>
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 谢谢。我认为困难来自每一行的事实,我将有一个 ddl 链接到 seconf ddl。我不知道什么时候做这个绑定
      猜你喜欢
      • 1970-01-01
      • 2020-12-03
      • 2014-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-20
      相关资源
      最近更新 更多