zoukankan      html  css  js  c++  java
  • GridView从入门到精

    工作中常常用到数据绑定,而使用GridView的次数最多,现在把GridView的一些常用方法写下来。

    新建一个asps的页面。如下

    View Code
    <body>
        <form id="form1" runat="server">
        <div>
            <asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" /><br/>
            <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
               >
                <Columns>
                <asp:TemplateField >
                <HeaderTemplate>
                                             <asp:CheckBox runat="server" Text="选择" ID="checkall" TextAlign="Left" AutoPostBack="true"  OnCheckedChanged="CheckAll" />
                </HeaderTemplate>
                  <ItemTemplate >
                  <asp:CheckBox id="danxuan" runat="server"  />
                   </ItemTemplate>
                </asp:TemplateField>
                    <asp:BoundField DataField="OrderId" />
                     <asp:HyperLinkField DataTextField="OrderId" HeaderText="IP地址" DataNavigateUrlFormatString="WebForm1.aspx?HangBiaoShi={0}"
                                                    DataNavigateUrlFields="OrderId" 
                        HeaderStyle-HorizontalAlign="Center" ItemStyle-HorizontalAlign="Center"
                                                    Target="_blank" >
    <HeaderStyle HorizontalAlign="Center"></HeaderStyle>
    
    <ItemStyle HorizontalAlign="Center"></ItemStyle>
                    </asp:HyperLinkField>
                    <asp:BoundField DataField="OrderDate" HeaderText="日期" />
                    <asp:BoundField DataField="userid" HeaderText="文件编号" />
                    <asp:BoundField DataField="totalprice" HeaderText="单价" />
                    <asp:BoundField DataField="postaddress" HeaderText="地址" />
                    <asp:BoundField DataField="state" HeaderText="" />
                    
                </Columns>
            </asp:GridView>
        </div>
        <div>
            <asp:Button ID="Button2" runat="server" Text="Button" onclick="Button2_Click" /> 
        </div>
        </form>
    </body>

    后台绑定数据如下

     string conn = "Data Source=.;Initial Catalog=bookshop;User ID=sa;Password=123456";
            protected void Button1_Click(object sender, EventArgs e)
            {
                using (SqlConnection coonn = new SqlConnection(conn))
                {
                    string sql = "select * from orders";
    
                    using (SqlCommand cmd = new SqlCommand(sql, coonn))
                    {
                        SqlDataAdapter sd = new SqlDataAdapter(cmd);
    
                        DataTable tb = new DataTable();
                        sd.Fill(tb);
    
                        GridView1.DataSource = tb;
                        GridView1.DataBind();
                        
                    }
                }
            }

    连接数据库,查询一个表,绑定到GridView上

    第一个功能,全选和全不选,这个常用到,在GridView里面回一个头模板,在头模板里面放一个CheckBox,写一个oncheckedchanged事件

    <HeaderTemplate>
    <asp:CheckBox runat="server" Text="选择" ID="checkall" TextAlign="Left" AutoPostBack="true" OnCheckedChanged="CheckAll" />

     </HeaderTemplate>

    然后在加一个项模板在项模板中新增一个Checkbox,

    <ItemTemplate >
    <asp:CheckBox id="danxuan" runat="server" />
    </ItemTemplate>

    记住在最外面还要加一个 <asp:TemplateField  ItemStyle-HorizontalAlign="Center">模板。

    现在写Checkbox单选事件的后台代码

      protected void CheckAll(object sender, EventArgs e)
            {
                CheckBox cb;
             
    
                if (((CheckBox)sender).Checked == false)
                {
                    for (int i = 0; i < GridView1.Rows.Count; i++)
                    {
                        cb = (CheckBox)GridView1.Rows[i].Cells[0].FindControl("danxuan");
                        cb.Checked = false;
                    }
                }
                if (((CheckBox)sender).Checked == true)
                {
                    
                    for (int i = 0; i < GridView1 .Rows.Count; i++)
                    {
                        cb = (CheckBox)GridView1.Rows[i].Cells[0].FindControl("danxuan");
                        cb.Checked = true;
                    }
                }
                    
            }

    这样全选和全不选就做好了,

    二 现在再做一个超连接

    把其中一列改为


    <asp:HyperLinkField DataTextField="OrderId" HeaderText="IP地址" DataNavigateUrlFormatString="WebForm1.aspx?HangBiaoShi={0}"
    DataNavigateUrlFields="OrderId"
    HeaderStyle-HorizontalAlign="Center" ItemStyle-HorizontalAlign="Center"
    Target="_self" >
    <HeaderStyle HorizontalAlign="Center"></HeaderStyle>

    <ItemStyle HorizontalAlign="Center"></ItemStyle>
    </asp:HyperLinkField>

    绑定字段是Orderid,DataNavigateUrlFormatString是超连接的地址,后面的参数是“DataNavigateUrlFields="OrderId”,这样我们点这一列就会定向到一个新的页面还会加一个参数。

    当选中一列的时候,单机一个按键,得到这一列一个字段的值。
     protected void Button2_Click(object sender, EventArgs e)
            {
                CheckBox cb;
                for (int i = 0; i <GridView1 .Rows.Count; i++)
                {
                     cb = (CheckBox)GridView1.Rows[i].Cells[0].FindControl("danxuan");
    
                     if (cb.Checked == true)
                     {
                      
                         string ss = GridView1.Rows[i].Cells[1].Text;
    
                         Response.Write(ss.ToString());
                     }
                }
            }

    三,设置GridView的DataKeyNames属性,在这个属性里面,可以把我们后台绑定在GridView的字单全放在这个属性里面,用,号分开,可以放多个字单值,如:DataKeyNames="prizename,number,totalpointm,prizeid,

      然后我们在后台如何使用呢?看下面:

    protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
     {

           //这行代码就可以得到我们当前在保存在页面DataKeyNames属性里的字单的值!而且它还会自动找到当前行的值,很不错哦!
    String lsHBaseInfoId = GridView1.SelectedDataKey.Values["prizename"].ToString();

    String id = GridView1.SelectedDataKey.Values["number"].ToString();

      Response.Write(lsHBaseInfoId);
     }

    GridView1_SelectedIndexChanged这个事件的意思是:当你选择行时,对这行操作时发生,比如我们在GridView里面加了一个

    <asp:CommandField  SelectText="处理" HeaderText="操作" ShowSelectButton="True"/> 列,当我们在页面点击这列的时候就会

    进入到这个方法!

    ---------------------------------------------------------------------

     从GridView里面导出EXCEL文件:

    #region 导出到EXCEL按钮事件
     protected void btnToExcel_Click(object sender, EventArgs e)
     {


      if (GridView1.Rows.Count <= 0) return;

      Response.Charset = "GB2312";
      Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
      GridView1.AllowPaging = false;
      GridView1.AllowSorting = false;
      GridView1.Page.EnableViewState = false;

      Response.AddHeader("content-disposition", "attachment; filename=" + HttpUtility.UrlEncode("酒店佣金对账调整表" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xls", System.Text.Encoding.UTF8));

      Response.ContentType = "application/ms-excel";
      Response.Write("<meta http-equiv=Content-Type content=\"text/html; charset=GB2312\">");
      

      this.GridView1.DataSource = GetDataList();  //绑定GridView
      this.GridView1.DataBind();

      System.IO.StringWriter tw = new System.IO.StringWriter();
      HtmlTextWriter hw = new HtmlTextWriter(tw);
      GridView1.RenderControl(hw);
      Response.Write(tw.ToString());
      GridView1.AllowPaging = true;
      Response.End();

      
     }
     #endregion

    一定要重写这个方法,不然会报错!

    public override void VerifyRenderingInServerForm(Control control)
     {

     }
     这样简单就可以实现把GridView转成EXCEL输出了!就这么简单!

     //gvw 需要合并的GridView,sCol要合并开始列(从0开始),eCol要合并的结束列 

    
    

    public static void MergeRows(GridView gvw, int sCol, int eCol)
    {
    for (int rowIndex = gvw.Rows.Count - 2; rowIndex >= 0; rowIndex--)
    {
    GridViewRow row = gvw.Rows[rowIndex];

    
    

    GridViewRow previousRow = gvw.Rows[rowIndex + 1];

    
    

    for (int i = sCol; i < eCol + 1; i++)
    {
    if (row.Cells[i].Text != "" && row.Cells[i].Text != " ")
    {
    if (row.Cells[i].Text == previousRow.Cells[i].Text)
    {
    row.Cells[i].RowSpan = previousRow.Cells[i].RowSpan < 1 ? 2 : previousRow.Cells[i].RowSpan + 1;

    
    

    previousRow.Cells[i].Visible = false;
    }
    }
    }
    }
    }

    protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
    {
    GridViewRow GridR = GridView1.SelectedRow;
    string S = GridR.Cells[1].Text.ToString();
    Response.Write(S);
    }

    今天先写到这,过几天有时间再加一些别的用方法

     http://www.360doc.com/content/12/0904/10/1039473_234182842.shtml
  • 相关阅读:
    JS面向对象的理解
    引用类型值的相等判断
    数组的常用方法
    得到一定范围内的随机数
    数组随机排序
    【目标检测大集合】R-FCN、SSD、YOLO2、faster-rcnn和labelImg实验笔记
    卷积层和池化层学习
    R-FCN:基于区域的全卷积网络来检测物体
    【目标检测】Faster RCNN算法详解
    Selective Search for Object Recognition
  • 原文地址:https://www.cnblogs.com/xu3593/p/3003231.html
Copyright © 2011-2022 走看看