2012-09-03 68 views
9

Tôi không thể ràng buộc danh sách thả xuống của tôi có trong mẫu chỉnh sửa. Tôi nhận được tham chiếu null khi tôi cố gắng truy cập nó.Danh sách thả xuống ràng buộc bên trong GridView edititemtemplate

thiết kế của tôi:

<asp:TemplateField HeaderText ="Category"> 
    <ItemTemplate > 
    <asp:Label ID="drpcategory" Text ='<%#Bind("category") %>' runat ="server" /> 
    </ItemTemplate> 
    <EditItemTemplate> 
     <asp:DropDownList ID="drpcategory1" AppendDataBoundItems="True" runat="server" > 
     </asp:DropDownList> 
    </EditItemTemplate> 
</asp:TemplateField> 

Mã của tôi đằng sau:

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(); 
} 

Tôi đã thử tìm kiếm trên mạng và đã cố gắng rất nhiều điều vô ích. Tôi mới tham gia asp. Cảm ơn trước. Tôi muốn danh sách thả xuống bị ràng buộc chỉ khi người dùng vào chế độ chỉnh sửa.

+0

gv_table1 là gì? Tôi nghĩ rằng đó có thể là vấn đề. Vui lòng kiểm tra – kbvishnu

+2

Không sử dụng 'Ô [8] .FindControl (" drpcategory1 ")' nhưng 'row.FindControl (" drpcategory1 ")' vì 'NamingContainer' là hàng không phải là ô. Cách của bạn dễ bị lỗi hơn. –

+0

Tôi đang sử dụng row.findcontrol chỉ. Tôi cũng đã sử dụng cells.I đã thử cả hai nhưng không nhận được kết quả mong muốn. – Prashanth

Trả lời

30

Mã Đằng sau: Tested Mã và cũng đặt thả xuống danh sách giá trị được lựa chọn trên chế độ chỉnh sửa

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 
} 

Blog Chi tiết Điều: How to bind drop-down list inside gridview edit template

+0

Có điều mong muốn. Nhưng DataRowView dr = e.Row.DataItem là DataRowView; ddList.SelectedItem.Text = dr ["category_name"]. ToString(), hai dòng này cho thấy lỗi loại bỏ hai dòng tôi thực hiện và nhận được đầu ra dude.Thanks bro – Prashanth

+0

@Prashanth: tốt nếu nó giúp, cũng có thể u dán lỗi msg u nhận được cho những dòng. –

+0

Dude tôi sửa chữa lỗi đó nó chỉ là một vấn đề đặt tên nhưng bây giờ Bro tất cả là tốt nhưng bây giờ các yếu tố đầu tiên trong danh sách thả xuống được viết lại cho người đàn ông giá trị nhãn khi ở chế độ chỉnh sửa (tức là) tôi có sự lặp lại của một yếu tố và cũng mất other.Hope bạn hiểu những gì tôi có ý nghĩa. – Prashanth

0

Sự kiện RowEditing xảy ra ngay trước khi một hàng được chỉnh sửa.

Thay vào đó, bạn nên sử dụng sự kiện 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 
    } 
} 
+0

Giá trị Drpcategory1 là rỗng chỉ khi tôi đặt breakpoint và kiểm tra value.I đã làm theo bạn nói. – Prashanth

0

Bạn phải sử dụng sự kiện RowDataBound để ràng buộc điều khiển thả xuống cho hàng đã chỉnh sửa. Vui lòng sử dụng phương thức bên dưới trong sự kiện 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. 
2
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; 
     } 
    }  
Các vấn đề liên quan