Привязать выпадающий список в gridview в asp.net
HTML-код:
<ItemTemplate>
<asp:Literal ID="faculty" runat="server" Text='<%#Eval("facultyname")%>'>
</asp:Literal>
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList ID="fact" runat="server">
</asp:DropDownList>
код bihind:
protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
{
DropDownList dropdown = GridView1.Rows[e.NewEditIndex].FindControl("fact") as DropDownList;
facultyDal c = new facultyDal();
dropdown.DataSource = c.show();
dropdown.DataBind();
dropdown.DataTextField = "facultyname";
dropdown.DataValueField = "facultyid";
}
Исключение:
В экземпляре объекта не задана ссылка на объект.
Когда я связываюсь с раскрывающимся списком источников данных, возникает указанное выше исключение, помогите...
4 ответа
Попробуйте вот так с помощью RowDataBound.
Для привязки в режиме редактирования
protected void RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow && gvCustomers.EditIndex == e.Row.RowIndex)
{
DropDownList ddlfaculties = (DropDownList)e.Row.FindControl("fact");
string query = "select distinct facultyname from your-Table-Name";
SqlCommand cmd = new SqlCommand(query);
ddlfaculties .DataSource = GetData(cmd);
ddlfaculties .DataTextField = "facultyname";
ddlfaculties .DataValueField = "facultyid";
ddlfaculties .DataBind();
ddlfaculties .Items.FindByValue((e.Row.FindControl("faculty") as Literal).Text).Selected = true;
}
}
Для добавления выбранного значения из выпадающего списка.
protected void RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow && gvCustomers.EditIndex == e.Row.RowIndex)
{
DropDownList ddlfaculties = (DropDownList)e.Row.FindControl("fact");
string query = "select distinct facultyname from Your-Table-Name";
SqlCommand cmd = new SqlCommand(query);
ddlfaculties .DataSource = GetData(cmd);
ddlfaculties .DataTextField = "facultyname";
ddlfaculties .DataValueField = "facultyid";
ddlfaculties .DataBind();
ddlfaculties .Items.FindByValue((e.Row.FindControl("faculty") as Literal).Text).Selected = true;
}
}
Ошибка возникает из-за того, что вы пытаетесь привязать данные к выпадающему списку перед включением режима редактирования.
protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
{
GridView1.EditIndex = e.NewEditIndex;
gridbind();//fetch data from database and bind to grid
DropDownList dropdown = GridView1.Rows[e.NewEditIndex].FindControl("fact") as DropDownList;
facultyDal c = new facultyDal();
dropdown.DataSource = c.show();
dropdown.DataBind();
dropdown.DataTextField = "facultyname";
dropdown.DataValueField = "facultyid";
}
Измените свой код на следующий
GridView1.EditIndex
DropDownList dropdown = GridView1.Rows[GridView1.EditIndex].FindControl("fact") as DropDownList;
Используя сетку вида rowdatabound evet мы можем привязать данные к веб-элементу управления в виде сетки
получить строку и найти элемент управления, используя индекс редактирования, затем связать данные