2010-07-08 44 views
2

我有两个嵌套的DropDownLists(第一个ddl中选定的值将限制第二个ddl的内容)。如何在asp.NET中实现嵌套DropDownLists中的GridView?

这里附加的例子在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> 

而数据源是这样的:

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

谢谢!

回答

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

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

+0

谢谢。我认为困难来自于每一行的事实,我将有一个ddl链接到seconf ddl。我无法弄清楚什么时候做这个绑定 – 2010-07-08 12:55:55