zoukankan      html  css  js  c++  java
  • 合并 GridView 的单元格

         在用GridView展示数据的时候需要把相同的列的单元格横或坚合并在一起(如下图所示),以前做这样的图一直用Repeater,但Repeater分页没有用GridView快,直接点分页就可以自动完成(人懒),现在换成用GridView做,没想到更简单

    实现代码:

    //在RowCreated事件中添加多一个表头列

       protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.Header)
            {

               //删除默认的2个cell,以便下面自己添加的列跟竖跨本默认列
                e.Row.Cells.RemoveAt(1);
                GridViewRow rowHeader = new GridViewRow(0, 0, DataControlRowType.Header, DataControlRowState.Normal);
                rowHeader.BackColor = System.Drawing.Color.White;
                rowHeader.Font.Bold = true;

                TableCellCollection cells = e.Row.Cells;
                TableCell headerCell = new TableCell();
                headerCell.HorizontalAlign = HorizontalAlign.Center;
                headerCell.Text = "姓名";
                rowHeader.Cells.Add(headerCell);

                headerCell = new TableCell();
                headerCell.HorizontalAlign = HorizontalAlign.Center;
                headerCell.Text = "学期";

                //竖跨两列
                headerCell.RowSpan = 2;
                rowHeader.Cells.Add(headerCell);

                headerCell = new TableCell();
                headerCell.Text = "学生成绩";

                //学生成绩列横跨剩下几个单元格
                headerCell.ColumnSpan = cells.Count - 1;
                headerCell.HorizontalAlign = HorizontalAlign.Center;

                rowHeader.Cells.Add(headerCell);
                rowHeader.Visible = true;
                GridView1.Controls[0].Controls.AddAt(0, rowHeader);
            }
        }

    //在DataBound事件中把相同的名字合并

        protected void GridView1_DataBound(object sender, EventArgs e)
        {
            for (int i = 0; i < GridView1.Rows.Count; )
            {
                string nowValue = GridView1.Rows[i].Cells[0].Text;
                int j = i + 1;
                for (; j < GridView1.Rows.Count; j++)
                {
                    if (nowValue == GridView1.Rows[j].Cells[0].Text)
                        GridView1.Rows[j].Cells.RemoveAt(0);
                    else
                        break;
                }
                if ((j - i) > 1) //如果只有一列就不用RowSpan了,虽然用了没影响,但还是多生成一点html代码
                {
                    GridView1.Rows[i].Cells[0].RowSpan = j - i;
                }
                i = j;
            }

        }

  • 相关阅读:
    Kafka 不停机修改某一个topic数据保存时间
    jvisualvm 工具使用
    jmap命令详解----查看JVM内存使用详情
    C语言计算时间函数 & 理解linux time命令的输出中“real”“user”“sys”的真正含义
    JVM NativeMemoryTracking 分析堆外内存泄露
    java调用shell脚本并传递参数
    top -H -p查看某个进程内部线程占用情况分析: pstack显示每个进程的栈跟踪
    shell-awk 按列求和
    HTML&CSS基础-ps的基本操作
    HTML&CSS基础-清除浮动
  • 原文地址:https://www.cnblogs.com/elzero/p/1282772.html
Copyright © 2011-2022 走看看