Соединение 2 dropDownList с SqlDataSource FilterExpression внутри ASP:Repeater

Используя 2 dropDownList в строке повторителя, как можно использовать 1-й в качестве фильтра для 2-го?

Схема ретранслятора проста: [category_dropDown][item_dropDown][add_button]

Проблема в том, что я не могу подключить два элемента управления dropDown. SqlDataSource ControlParameter не может найти ControlID для вызова (элементы управления переименованы повторителем). Изменение значения ControlID на «itemRepeater$dropDownCategory», очевидно, не помогает. Как связать эти раскрывающиеся списки для работы в парах?

В основном интересно, есть ли решение кода разметки, поскольку решение кода программной части будет проще реализовать.

<asp:Repeater ID="itemRepeater" runat="server" OnItemCommand="itemRepeater_ItemCommand" onitemdatabound="itemRepeater_ItemDataBound">
    <HeaderTemplate>
        <table>
        <tr>
            <td>Category</td>
            <td>Item</td>
            <td></td>
        </tr>
    </HeaderTemplate>
    <ItemTemplate>        
        <tr>
            <td><asp:DropDownList ID="dropDownCategory" runat="server" DataSourceID="SqlDataSourceCategory" DataTextField="Category" 
                DataValueField="ID_cat" SelectedValue='<%# DataBinder.Eval(Container.DataItem,"Category") %>' AppendDataBoundItems="true">                    
                <asp:ListItem Value="%" Text="Pick category" Selected="True" />
                </asp:DropDownList></td>
            <td><asp:DropDownList ID="dropDownItem" runat="server" DataSourceID="SqlDataSourceItem" DataTextField="Item" 
                DataValueField="ID_item" SelectedValue='<%# DataBinder.Eval(Container.DataItem,"Item") %>' AppendDataBoundItems="true">
                <asp:ListItem Value="%" Text="Pick item" Selected="True"  />
                </asp:DropDownList></td>   
            <td><asp:Button ID="repeatedButton" runat="server" CommandName='<%# DataBinder.Eval(Container.DataItem, "Button") %>' Text='<%# DataBinder.Eval(Container.DataItem, "Button") %>' /></td>             
        </tr>
    </ItemTemplate>
    <FooterTemplate>
        </table>
    </FooterTemplate>
</asp:Repeater>


<asp:SqlDataSource ID="SqlDataSourceCategory" runat="server" ConnectionString="..." 
    SelectCommand="SELECT [Category], [ID_cat] FROM [Categories]">
</asp:SqlDataSource>

<asp:SqlDataSource ID="SqlDataSourceItems" runat="server" ConnectionString="..." 
    SelectCommand="SELECT [ID_item],[Item] FROM [Items]"  FilterExpression="WHERE [ID_cat] = @ID_cat" >
    <FilterParameters>
        <asp:ControlParameter Name="ID_cat" ControlID="dropDownCategory" PropertyName="SelectedValue" />
    </FilterParameters>
</asp:SqlDataSource>    

Вышеприведенная привязка ControlID явно неверна, поскольку SqlDataSourceItems не может найти ControlID с именем «dropDownCategory» в ItemTemplate и выдает известное исключение: Не удалось найти элемент управления «dropDownCategory» в ControlParameter «ID_cat»

Заранее благодарю за любой совет.


person yosh    schedule 21.01.2013    source источник


Ответы (1)


Привет, следующая ссылка даст вам трюк:

Решение 1

Решение 2

например: Что-то вроде этого:

 DropDownList ddlcity = (DropDownList)grow.FindControl("ddlcity"); // To get the value of dropdown

        cmd.Parameters.Add("@city", ddlcity.SelectedItem.ToString());  // This will add selected item to database
person Rohit Vyas    schedule 21.01.2013
comment
Спасибо. Это полезно, но все еще не может заставить его работать. Если бы это были только каскадные выпадающие списки в статической сетке, это не проблема, но поскольку они добавляются динамически, я продолжаю получать много разных ошибок в нескольких сценариях. - person yosh; 21.01.2013