zoukankan      html  css  js  c++  java
  • 使用RenderMethod 委托实现DataGrid表头合并

    今天看到一篇文章,提出使用RenderMethod委托可以实现DataGrid表头的合并。自己测试了一下,效果不错,把DataGrid的表头转化为用Table来控制,就可以随心所欲了。可能前面有人用这种方法是实现过,但是我还是把代码贴上来,大家分享一下

      1using System;
      2using System.Collections;
      3using System.ComponentModel;
      4using System.Data;
      5using System.Drawing;
      6using System.Web;
      7using System.Web.SessionState;
      8using System.Web.UI;
      9using System.Web.UI.WebControls;
     10using System.Web.UI.HtmlControls;
     11using System.Data.SqlClient;
     12
     13namespace WebDataGridHeader
     14{
     15    /// <summary>
     16    ///DataGrid表头合并问题
     17    /// </summary>

     18    public class WebForm1 : System.Web.UI.Page
     19    {
     20        protected System.Web.UI.WebControls.DataGrid DataGrid1;
     21        protected System.Web.UI.WebControls.Label Label1;
     22    
     23        private void Page_Load(object sender, System.EventArgs e)
     24        {
     25            // 在此处放置用户代码以初始化页面
     26            string m_strConn = "server=.;uid=sa;pwd=sa;database=Northwind";
     27            SqlConnection conn = new SqlConnection(m_strConn);
     28            
     29            try
     30            {
     31                conn.Open();
     32
     33                SqlCommand cmd = new SqlCommand("SELECT * FROM Employees",conn);
     34            
     35                SqlDataAdapter adp = new SqlDataAdapter(cmd);
     36
     37                DataTable dt = new DataTable();
     38                adp.Fill(dt);
     39
     40                this.DataGrid1.DataSource = dt;
     41                this.DataGrid1.DataBind();
     42            }

     43            catch(Exception ex)
     44            {
     45                throw ex;
     46            }

     47            finally
     48            {
     49                conn.Close();
     50            }

     51        }

     52
     53        Web 窗体设计器生成的代码
     74        
     75        /// <summary>
     76        /// 创建Item
     77        /// </summary>
     78        /// <param name="sender"></param>
     79        /// <param name="e"></param>

     80        private void DataGrid1_ItemCreated(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
     81        {
     82            //将Item的呈现方法定向到自定义的呈现方法上
     83            ListItemType lit = e.Item.ItemType;
     84            if(ListItemType.Header == lit)
     85            {
     86                e.Item.SetRenderMethodDelegate(new RenderMethod(NewRenderMethod));
     87            }

     88        }

     89        
     90        /// <summary>
     91        /// 自定义的Item呈现方法
     92        /// </summary>
     93        /// <param name="writer"></param>
     94        /// <param name="ctl"></param>

     95        private void NewRenderMethod(HtmlTextWriter writer,Control ctl)
     96        {
     97            //不需要从<TR>标签开始
     98            //输出“联系电话”列
     99            writer.Write("<TD colspan=\"3\" align=\"center\">联系电话</TD>\n");
    100
    101            //“地址”列必须有rowspan属性且必须在第一列呈现
    102            TableCell cell = (TableCell)ctl.Controls[ctl.Controls.Count - 1];
    103            cell.Attributes.Add("rowspan","2");
    104            cell.RenderControl(writer);
    105
    106            //现在关闭第一行
    107            writer.Write("</TR>\n");
    108
    109            //将设计时的样式属性添加到第二行使得两行的外观相似
    110            this.DataGrid1.HeaderStyle.AddAttributesToRender(writer);
    111
    112            //插入第二行
    113            writer.RenderBeginTag("TR");
    114
    115            //呈现除了最后一列(刚才已经呈现过了)外的所有在设计时定义的cells
    116            for(int i=0;i<=ctl.Controls.Count-2;i++)
    117            {
    118                ctl.Controls[i].RenderControl(writer);
    119            }

    120
    121            //不需要以</TR>结束
    122        }

    123    }

    124}

    在测试例子中的DataGrid选择了Employees表中的四个字段
    代码如下:
    <asp:DataGrid id="DataGrid1" runat="server" Width="793px" Height="296px" AutoGenerateColumns="False"
    BorderColor="#CC9966" BorderStyle="None" BorderWidth="1px" BackColor="White" CellPadding="4">
    <SelectedItemStyle Font-Bold="True" ForeColor="#663399" BackColor="#FFCC66"></SelectedItemStyle>
    <ItemStyle ForeColor="#330099" BackColor="White"></ItemStyle>
    <HeaderStyle Font-Bold="True" ForeColor="#FFFFCC" BackColor="#990000"></HeaderStyle>
    <FooterStyle ForeColor="#330099" BackColor="#FFFFCC"></FooterStyle>
    <Columns>
    <asp:BoundColumn DataField="LastName" HeaderText="办公电话"></asp:BoundColumn>
    <asp:BoundColumn DataField="FirstName" HeaderText="住宅电话"></asp:BoundColumn>
    <asp:BoundColumn DataField="HomePhone" HeaderText="移动电话"></asp:BoundColumn>
    <asp:BoundColumn DataField="Address" HeaderText="联系地址"></asp:BoundColumn>
    </Columns>
    <PagerStyle HorizontalAlign="Center" ForeColor="#330099" BackColor="#FFFFCC"></PagerStyle>
    </asp:DataGrid>

  • 相关阅读:
    区别@ControllerAdvice 和@RestControllerAdvice
    Cannot determine embedded database driver class for database type NONE
    使用HttpClient 发送 GET、POST、PUT、Delete请求及文件上传
    Markdown语法笔记
    Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required
    Mysql 查看连接数,状态 最大并发数(赞)
    OncePerRequestFilter的作用
    java连接MySql数据库 zeroDateTimeBehavior
    Intellij IDEA 安装lombok及使用详解
    ps -ef |grep xxx 输出的具体含义
  • 原文地址:https://www.cnblogs.com/Fooo/p/646939.html
Copyright © 2011-2022 走看看