且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

如何在gridview中获取值

更新时间:2023-02-23 11:30:30

我猜,因为你还没有发布异常细节,当你调用 GridView1.SelectedRow时,你得到一个 NullReferenceException 。的FindControl(...);您的网格没有选定的行,因此您尝试在 null 引用上调用方法。



尝试使用 sender 参数获取父行,并从那里找到您的控件:

  protected   void  ddlEmp_SelectedIndexChanged( object  sender,EventArgs e)
{
控制行=((控制)发送者).NamingContainer;

DropDownList ddlEmp =(DropDownList)row.FindControl( ddlEmp) ;
DropDownList ddlEmp2 =(DropDownList)row.FindControl( ddlEmp2);
标签lblPointName =(标签)ddlEmp.NamingContainer.FindControl( lblPointName);
标签lblPointName1 =(标签)ddlEmp.NamingContainer.FindControl( lblPointName1);

string Emp1 = ddlEmp.SelectedValue;
string Emp2 = ddlEmp2.SelectedValue;
string pointname = lblPointName.Text;
string pointname1 = lblPointName1.Text;

...
}



如果这不能解决问题,那么你需要发布全部细节你得到的例外情况。


尝试下面给出的代码 -



 protected void ddlEmp_SelectedIndexChanged (object sender,EventArgs e)
{
GridViewRow gvRow =((GridViewRow)((DropDownList)sender).NamingContainer);
DropDownList ddlEmp = gvRow.FindControl(ddlEmp)作为DropDownList;
}


i am using following code to generate gridview.

protected void Page_Load(object sender, EventArgs e)
     {
         if (!this.IsPostBack)
         {
             this.BindGrid();
         }
     }

     private void BindGrid()
     {
         Entities entities = new Entities();


         Gridview1.DataSource = from customer in entities.SectorWisePoints.ToList()
                                    select customer;

         Gridview1.DataBind();

     }
     //protected void gridView_PreRender(object sender, EventArgs e)
     //{
     //    GridDecorator.MergeRows(Gridview1);
     //}
     protected void OnRowDataBound(object sender, GridViewRowEventArgs e)
     {
         if (e.Row.RowType == DataControlRowType.DataRow)
         {

             CheckBox CHKBOX = (e.Row.FindControl("Released") as CheckBox);
             CheckBox CHKBOX1 = (e.Row.FindControl("Released1") as CheckBox);
                 DropDownList ddlEmployee = (e.Row.FindControl("ddlEmp") as DropDownList);
                 DropDownList ddlEmployee2 = (e.Row.FindControl("ddlEmp2") as DropDownList);
                 var emp1 = _service.GetEmployeeDutyByEmployee_Id(MyUser.Employee_Id).LastOrDefault();
                 var EmpList = _service.GetAllEmployeeDuty().OrderByDescending(x => x.EndDate).GroupBy(x => x.Employee_Id).Select(x => x.First()).ToList();
                 var empList = EmpList.Where(X => X.ToSector_Id == emp1.ToSector_Id).ToList();
                 ddlEmployee.Bind(empList, "EmployeeIdName", "Employee_Id");
                 ddlEmployee2.Bind(empList, "EmployeeIdName", "Employee_Id");





         }
     }


aspx code is

<asp:GridView ID="Gridview1" ControlStyle-BackColor="#ccccff" CssClass="col-sm-10" runat="server"   AutoGenerateColumns="false" OnRowDataBound="OnRowDataBound" 

                        >
                        <Columns>
                            
                            <asp:TemplateField HeaderText="PointName">
                                <ItemTemplate>
                                    <asp:Label ID="lblPointName"  runat="server" Text='<%# Eval("Name")%>'> ></asp:Label>
                                </ItemTemplate>
                            </asp:TemplateField>    
                            <asp:TemplateField HeaderText="Employee">
                                <ItemTemplate>
                                    <asp:DropDownList ID="ddlEmp" runat="server" OnSelectedIndexChanged="ddlEmp_SelectedIndexChanged" AutoPostBack="true"></asp:DropDownList>
                                </ItemTemplate>
                            </asp:TemplateField>
                             <asp:TemplateField HeaderText="Released">
                                <ItemTemplate>
                                    <asp:CheckBox  runat="server" ID="Released"/>
                                </ItemTemplate>                                
                            </asp:TemplateField>
                            <asp:TemplateField HeaderText="PointName">
                                <ItemTemplate>
                                    <asp:Label ID="lblPointName1"  runat="server" Text='<%# Eval("Name")%>'>></asp:Label>
                                </ItemTemplate>
                            </asp:TemplateField>  
                             <asp:TemplateField HeaderText="Employee">
                                <ItemTemplate>
                                    <asp:DropDownList ID="ddlEmp2" runat="server" OnSelectedIndexChanged="ddlEmp_SelectedIndexChanged" AutoPostBack="true"></asp:DropDownList>
                                </ItemTemplate>
                                
                            </asp:TemplateField>
                            <asp:TemplateField HeaderText="Released">
                                <ItemTemplate>
                                    <asp:CheckBox  runat="server" ID="Released1"/>
                                </ItemTemplate>
                                
                            </asp:TemplateField>
                        </Columns>
                    </asp:GridView>


i want to save point name and selected employee on this selected event ,but i am unable to gat values,i am trying following code ,its give exception

protected void ddlEmp_SelectedIndexChanged(object sender, EventArgs e)
   {
       DropDownList ddl1 = (DropDownList)Gridview1.FindControl("ddlEmp");
       string Emp1 = ((DropDownList)Gridview1.SelectedRow.FindControl("ddlEmp")).SelectedItem.Value;
       string Emp2 = ((DropDownList)Gridview1.SelectedRow.FindControl("ddlEmp")).SelectedItem.Value;
       string pointname = ((Label)Gridview1.SelectedRow.FindControl("lblPointName")).Text;
       string pointname1 = ((Label)Gridview1.SelectedRow.FindControl("lblPointName")).Text;
   }


[edit]SHOUTING removed - OriginalGriff[/edit]

I'm guessing, since you haven't posted the exception details, that you're getting a NullReferenceException when you call GridView1.SelectedRow.FindControl(...); your grid doesn't have a selected row, so you're trying to call a method on a null reference.

Try using the sender parameter to get the parent row, and find your controls from there:
protected void ddlEmp_SelectedIndexChanged(object sender, EventArgs e)
{
    Control row = ((Control)sender).NamingContainer;
    
    DropDownList ddlEmp = (DropDownList)row.FindControl("ddlEmp");
    DropDownList ddlEmp2 = (DropDownList)row.FindControl("ddlEmp2");
    Label lblPointName = (Label)ddlEmp.NamingContainer.FindControl("lblPointName");
    Label lblPointName1 = (Label)ddlEmp.NamingContainer.FindControl("lblPointName1");
    
    string Emp1 = ddlEmp.SelectedValue;
    string Emp2 = ddlEmp2.SelectedValue;
    string pointname = lblPointName.Text;
    string pointname1 = lblPointName1.Text;
    
    ...
}


If that doesn't solve the problem, then you'll need to post the full details of the exception you're getting.


Try the given below code-

protected void ddlEmp_SelectedIndexChanged(object sender, EventArgs e)
{
GridViewRow gvRow = ((GridViewRow)((DropDownList)sender).NamingContainer);
            DropDownList ddlEmp = gvRow.FindControl("ddlEmp") as DropDownList;
}