GridView содержащий два DropDownLista

x_airat
Дата: 23.04.2010 21:13:39
В GridView содержится два DropDоwnList. Оба биндятся к разным SqlDataSource. Я хочу в строке GridView(в режиме редактирования) при выборе значения из первого дроплиста, чтобы значения второго дроплиста отфильтровалось по значению первого дроплиста. У второго DropDоwnLista в SqlDataSource4 селект запрос с параметром. Так вот все поля корректно биндятся, но при вызове у первого дроплиста метода onselectedindexchanged="dlist2_SelectedIndexChanged" выходит ошибка:
Методы привязки данных, например, Eval(), XPath() и Bind(), можно использовать только в контексте элемента управления с привязкой к данным.
    <asp:GridView ID="GridView1" runat="server" 
            AutoGenerateColumns="False" CellPadding="4" 
            DataKeyNames="id"         
            DataSourceID="SqlDataSource2">        
            <Columns>
                <asp:CommandField ShowEditButton="True" />
                <asp:TemplateField HeaderText="id" InsertVisible="False" 
                    SortExpression="id" Visible="False">
                    <EditItemTemplate>
                        <asp:Label ID="Label1" runat="server" 
                            Text='<%# Eval("id") %>'></asp:Label>
                    </EditItemTemplate>
                    <ItemTemplate>
                        <asp:Label ID="Label3" runat="server" 
                            Text='<%# Bind("id") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="id_UF" 
                    SortExpression="id_UF">
                    <EditItemTemplate>

                         <asp:DropDownList id="id_UF" runat="server"
                                            DataSourceID="SqlDataSource3"
                                            DataTextField="fldFacultyLongName" DataValueField="id_UF"
                                            SelectedValue='<%# Bind("id_UF")%>'
                                            onselectedindexchanged="dlist2_SelectedIndexChanged" 
                                            AutoPostBack="true"
                                            >
                        </asp:DropDownList>

                    </EditItemTemplate>
                    <ItemTemplate>
                        <asp:Label ID="Label1" runat="server" 
                            Text='<%# Bind("fldFacultyLongName") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="id_UCG" 
                    SortExpression="id_UCG">

                    <EditItemTemplate>
                         <asp:DropDownList id="dlist1" runat="server"
                                            DataSourceID="SqlDataSource4"
                                            DataTextField="fldCmpName" DataValueField="id_UCG"
                                            SelectedValue='<%# Bind("id_UCG")%>'                                           
                                            >
                        </asp:DropDownList>
                    </EditItemTemplate>

                    <ItemTemplate>
                        <asp:Label ID="Label2" runat="server" 
                            Text='<%# Bind("fldCmpName") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>           
        </asp:GridView>


        <asp:HiddenField ID="c_id_UF" runat="server" />
        <asp:SqlDataSource ID="SqlDataSource4" runat="server" 
            ConnectionString="<%$ ConnectionStrings:AbiturientDBConnectionString2 %>" 
            SelectCommand="SELECT [id_UCG], [id_UF], [fldCmpName] FROM [sprUniverCmpGroup] WHERE ([id_UF] = @id_UF)">
            <SelectParameters>
                <asp:ControlParameter ControlID="c_id_UF" Name="id_UF" 
                    PropertyName="Value" Type="Int32" />
            </SelectParameters>
        </asp:SqlDataSource>
        <asp:SqlDataSource ID="SqlDataSource3" runat="server" 
            ConnectionString="<%$ ConnectionStrings:AbiturientDBConnectionString2 %>" 
            SelectCommand="SELECT [id_UF], [fldFacultyLongName] FROM [sprUniverFaculty]">
        </asp:SqlDataSource>
        <asp:SqlDataSource ID="SqlDataSource2" runat="server" 
            ConnectionString="<%$ ConnectionStrings:AbiturientDBConnectionString2 %>" 
            SelectCommand="SELECT [id], [id_UF], [id_UCG], [id_AD], [fldFacultyLongName], [fldCmpName] FROM [sysContentsNames]"
            UpdateCommand="UPDATE sysContentsNames SET id=1 where id is NULL" >

Вот метод для DropDownList id="id_UF"
   protected void dlist2_SelectedIndexChanged(object sender, EventArgs e)
        {
            int i = GridView1.EditIndex; 
           //тут я меняю параметр для источника данных второго дроплиста
            c_id_UF.Value = ((DropDownList)GridView1.Rows[i].Cells[2].Controls[1]).SelectedValue;
 
            SqlDataSource4.DataBind(); //а тут уже вываливается эта ошибка (если не биндить то все равно выведит ошибку ну чуть позже)
       }
SanSYS
Дата: 24.04.2010 01:39:19
уберите SelectedValue='<%# Bind("id_UF")%>'
x_airat
Дата: 25.04.2010 13:20:35
Если я уберу SelectedValue='<%# Bind("id_UF")%>, то какой смысл GridView если он будет сбрасывать выбранный элемент при каждом редактировании, и как это поможет проблеме
Dmitriy1984
Дата: 04.07.2015 00:23:22
Такая же ситуация.
Gridview. В режиме редактирования два dropdownlist. Второй должен биндится по событию первого.
Axeleron
Дата: 04.07.2015 11:07:10
Dmitriy1984,
Ajax или перегружать весь грид