У меня есть GridView
с DropDownList
. Элементы DropDownList
необходимо установить в код позади. я проверил образцы онлайн код, и это выглядит я должен закодировать так:выпадающий список в ASP.Net GridView неправильно привязан
<asp:GridView ID="DG_Table" runat="server" style="z-index: 1;autogeneratecolumns="False"
onrowcommand="DG_Table_RowCommand"
onrowdatabound="onrowdatabound">
<Columns>
<asp:TemplateField HeaderText="Name" >
<ItemTemplate>
<asp:DropDownList ID="Name" runat="server" Text='<%# Bind("Name") %>'></asp:TextBox>
</ItemTemplate>
<asp:TemplateField HeaderText="field1" >
<ItemTemplate>
<asp:TextBox ID="field1" runat="server" Text='<%# Eval("FieldValue") %>'></asp:TextBox>
</ItemTemplate>
</Columns>
</asp:GridView>
В коде позади:
public void onrowdatabound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
//check if is in edit mode
if ((e.Row.RowState & DataControlRowState.Edit) > 0)
{
DropDownList dropdownlist = (DropDownList)e.Row.FindControl("Name");
dropdownlist.DataSource = new List<string>() { "Pete", "Jack", "Steve", "Mike", "Rob", "Jim", "Eric" };
dropdownlist.DataBind();
}
}
}
При отладке, я могу видеть, что отладчик входит onrowdatabound. На данный момент e.Row.RowType == DataControlRowType.Header
Возможно, это нормально на данном этапе. Таким образом, отладчик завершает работу. Я бы ожидал, что отладчик снова войдет в onrowdatabound
при попытке добавить строки к DataGrid
. Как-то это не так, поэтому Datasource
никогда не устанавливается и код позже пытается добавить значение в dropdownlist
, который не принадлежит к dropdownlist.Items
, вызывая ошибку выполнения:
Дополнительная информация: 'Name' has a SelectedValue which is invalid because it does not exist in the list of items
. .
(что логично, так как dropdownlist.datasource
никогда не был установлен
Когда DG_Table.DataBind()
называется, есть 3 строки:.
protected void B_Fill_Fennec_Click(object sender, EventArgs e)
{
List<fennec> list_fennec = new List<fennec>() { new fennec("Pete", "dev"), new fennec("Jack", "butcher"), new fennec("Steve", "wood chopper"), };
GridView1.DataSource = list_fennec.Select(x => new { Name = x.Name, FieldValue = x.Occupation });
GridView1.DataBind();
}
Любая оцененная помощь
ли это опечатка? или как это кодируется? style = "z-index: 1; autogeneratecolumns =" False " – Thangadurai
Если для каждой строки не запущено onrowdatabound, возможно, что-то не так с источником данных, который вы поставляете. Можете ли вы попробовать преобразовать результаты запроса LINQ в список и использовать это как источник данных. – Thangadurai