在gridview edititemtemplate中绑定下拉列表
我无法绑定edititem模板中的下拉列表。 当我尝试访问它时,我得到空引用。
我的设计:
<asp:Label ID="drpcategory" Text ='' runat ="server" />
我的代码背后:
protected void gv_RowEditing(object sender, GridViewEditEventArgs e) { gv_table1.EditIndex = e.NewEditIndex; DropDownList drpcategory1 = ((DropDownList)gv_table1.Rows[e.NewEditIndex].Cells[8].FindControl("drpcategory1")); //BindDropDown(drpcategory1); dt = con.GetData("Select category_name from category"); String str = gv_table1.Rows[e.NewEditIndex].FindControl("drpcategory1").GetType().ToString(); //((DropDownList)gv_table1.Rows[e.NewEditIndex].Cells[8].FindControl("drpcategory1")).DataSource = dt; drpcategory1.DataSource = dt; drpcategory1.DataTextField = "category_name"; drpcategory1.DataValueField = "category_name"; drpcategory1.DataBind(); this.setgrid(); }
我试过在网上看,试了很多东西都是徒劳的。 我是asp新手。 提前致谢。 我希望只有当用户进入编辑模式时才会绑定下拉列表。
代码隐藏:经过测试的代码,并在编辑模式下设置下拉列表选择值
protected void gv_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow) { if ((e.Row.RowState & DataControlRowState.Edit) > 0) { DropDownList ddList= (DropDownList)e.Row.FindControl("drpcategory1"); //bind dropdown-list DataTable dt = con.GetData("Select category_name from category"); ddList.DataSource = dt; ddList.DataTextField = "category_name"; ddList.DataValueField = "category_name"; ddList.DataBind(); DataRowView dr = e.Row.DataItem as DataRowView; //ddList.SelectedItem.Text = dr["category_name"].ToString(); ddList.SelectedValue = dr["category_name"].ToString(); } } } protected void gv_RowEditing(object sender, GridViewEditEventArgs e) { gv.EditIndex = e.NewEditIndex; gridviewBind();// your gridview binding function }
详细博客文章: 如何绑定gridview编辑模板中的下拉列表
protected void gvProject_RowDataBound(object sender, GridViewRowEventArgs e) { try { string Active = ""; if (e.Row.DataItem != null) { if ((e.Row.RowState & DataControlRowState.Edit) > 0) { Label lblEditActive = (Label)e.Row.FindControl("lblUP_ET_ActiveStatus"); if (lblEditActive.Text != string.Empty) { Active = lblEditActive.Text.Trim(); } DropDownList ddlActive = (DropDownList)e.Row.FindControl("ddlUP_ET_ActiveStatus"); ddlActive.Items.Clear(); ddlActive.Items.Add("True"); ddlActive.Items.Add("False"); ddlActive.DataBind(); ddlActive.Items.FindByText(Active).Selected = true; } } } catch (Exception ex) { throw ex; } }
RowEditing
事件恰好在编辑行之前发生。
您应该使用RowDataBound
事件。
protected void gv_RowDataBound(object sender, GridViewRowEventArgs e) { if (gv.EditIndex == e.Row.RowIndex && e.Row.RowType==DataControlRowType.DataRow) { DropDownList drpcategory1 = (DropDownList)e.Row.FindControl("drpcategory1"); //bind the control } }
您必须使用RowDataBound事件来绑定已编辑行的下拉控件。 请在RowDataBound事件中使用以下方法。
protected void gv_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowState == DataControlRowState.Edit) { DropDownList drpcategory1 = (DropDownList)e.Row.FindControl("drpcategory1"); DataTable dt = con.GetData("Select category_name from category"); drpcategory1.DataSource = dt; drpcategory1.DataTextField = "category_name"; drpcategory1.DataValueField = "category_name"; drpcategory1.DataBind(); } } Hope this will help you.
我是这样做的。 其中,Name和Id是Company对象的两个字段:
HTML代码:
C#代码背后:
protected IEnumerable PopulateddlCompanyEdit() { using (var bkDb = new BrickKilnDb()) { return bkDb.Companies.ToList(); } }