如何在gridview中获取值 [英] How to get values in gridview

查看:87
本文介绍了如何在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 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;
}


这篇关于如何在gridview中获取值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆