更新时间: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 aNullReferenceException
when you callGridView1.SelectedRow.FindControl(...)
; your grid doesn't have a selected row, so you're trying to call a method on anull
reference.
Try using thesender
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; }