В 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(); //а тут уже вываливается эта ошибка (если не биндить то все равно выведит ошибку ну чуть позже)
}