Binding dropdownlist inside gridview edititemtemplate

前端 未结 5 1139
终归单人心
终归单人心 2020-12-14 11:53

I\'m not able to bind my dropdownlist present in edititem template . I am getting null reference when i try to access it.

My design:



        
相关标签:
5条回答
  • 2020-12-14 12:29
    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;
            }
        }       
    
    0 讨论(0)
  • 2020-12-14 12:30

    Code Behind: Tested Code and also set dropdown-list selected value on edit mode

    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
    }
    

    Detailed Blog Article : How to bind drop-down list inside gridview edit template

    0 讨论(0)
  • 2020-12-14 12:39

    I do it like this. In which, Name and Id are two fields of Company object:

    HTML Code:

    <asp:TemplateField HeaderText="Công ty">
        <EditItemTemplate>
            <asp:DropDownList ID="ddlCompanyEdit" DataSource="<%# PopulateddlCompanyEdit() %>" DataValueField="Id" DataTextField="Name" runat="server"></asp:DropDownList>
        </EditItemTemplate>
        <ItemTemplate>
            <asp:Label ID="lbCompany" runat="server" Text='<%#Bind("Company") %>'></asp:Label>
        </ItemTemplate>
    </asp:TemplateField>
    

    C# code behind:

    protected IEnumerable<Company> PopulateddlCompanyEdit()
    {
        using (var bkDb = new BrickKilnDb())
        {
            return bkDb.Companies.ToList();
        }
    }
    
    0 讨论(0)
  • 2020-12-14 12:45

    You have to use RowDataBound event to bind the dropdown control for edited row. Please use below method in RowDataBound event.

            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.
    
    0 讨论(0)
  • 2020-12-14 12:49

    The event RowEditing occurs just before a row is edited.

    You should use the RowDataBound event instead.

    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
       }
    }
    
    0 讨论(0)
提交回复
热议问题