如何在gridview中获取值 [英] How to get values in gridview
问题描述
我正在使用以下代码生成gridview。
protected void Page_Load( object sender,EventArgs e)
{
if (!this.IsPostBack)
{
this .BindGrid();
}
}
私有 void BindGrid( )
{
实体实体= 新实体();
Gridview1.DataSource = 来自客户 entities.SectorWisePoints .ToList()
选择客户;
Gridview1.DataBind();
}
// protected void gridView_PreRender(object sender,EventArgs e)
// {
// GridDecorator.MergeRows(Gridview1);
// < span class =code-comment>}
protected void OnRowDataBound( object sender,GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
CheckBox CHKBOX =(e.Row.FindControl( 已发布) 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)。选择(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代码是
< asp:GridView ID = Gridview1 ControlStyle-BackColor = #ccccff CssClass = col-sm-10 runat = server 金toGenerateColumns = false OnRowDataBound = OnRowDataBound
>
< 列 >
< asp:TemplateField HeaderText = PointName >
< ItemTemplate >
< asp:标签 ID = lblPointName runat = 服务器 正文 =' <% #Eval( 名称)%>' > > < / asp:Label >
< / ItemTemplate >
< / asp:TemplateField >
< asp:TemplateField HeaderText = 员工 >
< ItemTemplate >
< asp:DropDownList ID = ddlEmp runat = server OnSelectedIndexChanged = ddlEmp_SelectedIndexChanged AutoPostBack = true > < / asp: DropDownList >
< / ItemTemplate >
< / asp:TemplateField >
< asp:TemplateField HeaderText = 已发布 >
< ItemTemplate >
< asp:CheckBox runat = server ID = 已发布 / >
< span class =code-keyword>< / ItemTemplate >
< / asp:TemplateField >
< asp:TemplateField HeaderText = PointName < span class =code-keyword>>
< ItemTemplate >
< asp:标签 ID = lblPointName1 runat = server 文字 =' <% #Eval( 名称)%>' > > < / asp:标签 >
< / ItemTemplate >
< / asp:TemplateField >
< < span class =code-leadattribute> asp:TemplateField HeaderText = 员工 >
< ItemTemplate >
< asp:DropDownList ID = ddlEmp2 runat = server OnSelectedIndexChanged < span class =code-keyword> = ddlEmp_SelectedIndexChanged AutoPostBack = true > < / asp:DropDownList >
< / ItemTemplate >
< / asp:TemplateField >
< asp:TemplateField HeaderText = 已发布 >
< ItemTemplate >
< asp:CheckBox runat = server ID = 已发布1 / >
< / ItemTemplate >
< / asp:TemplateField >
< /列 >
< / asp:GridView < span class =code-keyword>>
i希望在此选定活动中保存点名称和所选员工,但我无法gat值,我正在尝试遵循代码,它给予例外
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跨度>))的文本。
string pointname1 =((Label)Gridview1.SelectedRow.FindControl( lblPointName跨度>))的文本。
}
SHOUTING已删除 - OriginalGriff [/ edit]
< blockquote>我猜,因为你还没有发布异常细节,当你调用 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; }
这篇关于如何在gridview中获取值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!