• 使用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}
    支持TerryLee的创业产品Worktile
    Worktile,新一代简单好用、体验极致的团队协同、项目管理工具,让你和你的团队随时随地一起工作。完全免费,现在就去了解一下吧。
    https://worktile.com
  • 相关阅读:
    洛谷 P5595 【XR-4】歌唱比赛
    洛谷 P5594 【XR-4】模拟赛
    洛谷 AT1350 深さ優先探索
    洛谷 P1449 后缀表达式
    VIJOS-P1064 迎春舞会之数字舞蹈
    洛谷 P3998 [SHOI2013]发微博
    CF306C White, Black and White Again
    CF261E Maxim and Calculator
    JLOI 2014 松鼠的新家
    HNOI 2009 有趣的数列
  • 原文地址:https://www.cnblogs.com/Terrylee/p/246576.html
Copyright © 2020-2023  润新知