Table 控件单元格的动态合并技术 .

本文详细介绍了如何使用ASP.NET动态生成HTML表格,包括创建动态表的基本步骤、表头行的创建与单元格合并、表体单元格合并的方法,以及调用示例。文章深入浅出,适合开发者学习。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

一、引言
  Table 控件可以用给定的静态内容在设计时生成表, 但Table 控件的威力通常在用动态内容以编程方式生成表时才会体现出来。Table 控件允许生成HTML 表并以直接方式指定其属性。Table 类主要由控件开发人员使用。
  所有的Web 控件都有两个基本属性, 第一个属性是runat ="server", 它告诉ASP.NET 在服务器上处理控件, 并为控件执行所有的ASP.NET 功能, 包括状态的创建。第二个属性是ID, 指明该控件的唯一标识代号, 以便在代码中操纵该控件。
  Table 控件主要由3 个组件组成:Table、TableRow和TableCell。
二、动态创建表
  动态地创建一个表一般包含三个步骤:
  ( 1) 在.aspx 文件中, 在<body></body>里用一个asp 标签创建Table1 控件, Table1 就是一个对象。
  <body>
    <form id="Form1" method="post" runat="server">
      <asp:Table id="Table1" runat="server"> </asp:Table>
  </body>
  Table 的具体生成可在<script></script>中通过函数写在.aspx文件中完成, 也可直接写在.cs 文件中。在具体生成上根据如下过程的:
  ( 2) 创建表格行对象TableRow(), 并向表中添加该行, 根据需要设置表格行的相关属性。
  ( 3) 创建表格单元格对象TableCell(), 并向表行中添加该单元格, 根据需要设置单元格的相关属性。
  ( 4) 对表中的各行重复(2)(3)过程。
  实现方法的核心代码如下:

        private void DrawTable(ref Table table, ref int seed)
        {

            TableRow r; // 表格行对象
            TableCell c; // 表格单元格对象
            TextBox txt;
            for (int k = 0; k < 10; k++) // 行数控制
            {

                int s = 0; // 列标识变量
                r = new TableRow(); table.Rows.Add(r); // 创建行
                // 第0 列
                c = new TableCell(); r.Cells.Add(c); // 创建列
                c.ID = "aaa";
                c.Text = k.ToString(); // 第0 列内容
               
                // 第1 列
                c = new TableCell(); r.Cells.Add(c); // 创建列
                txt = new TextBox();
                txt.ID = "Txt"+k.ToString();
                c.ID = "bbb";
                c.Text = k.ToString(); // 第1 列内容
                c.Controls.Add(txt);
            }
        }

  上述创建的是一个表格的表体的结构, 其内容根据具体需要可从数据库中获得。

三、表格标题行的创建与单元格合并
  实际上, 表格标题行是按行构成的。如下面的示例表格中"院系"、"专业"、"班级"、"招生"和"备注"是第0 行, 而"人数"和"女生"是第1 行。其中"院系"、"业"、"班级"和"备注"占2 行, "招生"占2 列。
  单元格合并主要用到单元格的RowSpan 和ColumnSpan 两个属性。实现示例表格标题行的核心代码如下:
  private void SetTableHead(Table table, ref int seed)
  { // 第0 行
    TableRow r = new TableRow(); table.Rows.Add(r);
    TableHeaderCell h; // 标题行单元格对象
    string[] sa1 = {"院系", "专业", "班级"};
    for (int col = 0; col < 3; col++)
    {
      h = new TableHeaderCell(); r.Cells.Add(h); // 创建列
      h.RowSpan = 2; // 占2 行
      h.ID = ProduceID(ref seed, col);
      h.Text = sa1[col];
    }
    h = new TableHeaderCell(); row1.Cells.Add(h);
    h.ColumnSpan = 2; // 占2 列
    h.Text = "招生";
    h = new TableHeaderCell(); row1.Cells.Add(h);
    h.RowSpan = 2; // 占2 行
    h.Text = "备注";
    // 第1 行
    r = new TableRow(); table.Rows.Add(r); // 创建行
    h = new TableHeaderCell(); r.Cells.Add(h); // 创建列
    h.Text = "人数";
    h = new TableHeaderCell(); r.Cells.Add(h);
    h.Text = "女生";
  }

四、表体单元格合并
  由于表体中数据具有动态性的特点, 其纵向合并方法, 一般是逐行判断要合并的单元格里的值是否和上一行同列的相同,要是相同的话就合并, 不同的话就接着判断。
  该方法的核心代码如下:
  private void SetTableHead(Table table, ref int seed)
        {
            // 第0 行
            TableRow r = new TableRow(); table.Rows.Add(r);
            TableHeaderCell h; // 标题行单元格对象
            string[] sa1 = { "院系", "专业", "班级" };
            for (int col = 0; col < 3; col++)
            {
                h = new TableHeaderCell(); r.Cells.Add(h); // 创建列
                h.RowSpan = 2; // 占2 行
                h.ID = "ccc";
                h.Text = sa1[col];
            }
            h = new TableHeaderCell(); r.Cells.Add(h);
            h.ColumnSpan = 2; // 占2 列
            h.Text = "招生";
            h = new TableHeaderCell(); r.Cells.Add(h);
            h.RowSpan = 2; // 占2 行
            h.Text = "备注";
            // 第1 行
            r = new TableRow(); table.Rows.Add(r); // 创建行
            h = new TableHeaderCell(); r.Cells.Add(h); // 创建列
            h.Text = "人数";
            h = new TableHeaderCell(); r.Cells.Add(h);
            h.Text = "女生";
        }
五、调用
  private int m_Seed = 0; //
  private void Page_Load(object sender, System.EventArgs e)
  {

    this.SetTableHead(Table1, ref m_Seed); // 标题行
    this.DrawTable(ref Table1, ref m_Seed); // 表体
    ColMerge(ref Table1, 0, 1); //从第1 行起合并第0 列
  }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值