为Gridview控件添加多行表头(之一)

在实际工作中,经常看到电子版或者纸质版的表格。这些表格,通常都不是一行表头,需要2行或者3行,只有这样的表头,才能明确表示表中数据的具体涵义。并且多行表头中,将数据相同的单元格进行合并,包括横向合并、纵向合并。

那么,我们在使用Gridview时,如何才能实现多行表头呢?

主要有三种方法,①是利用GridviwRow对象的header类型生成对象;②直接将表头内容作为普通数据显示,然后再通过样式,将表头的背景色与其它的行分开,模拟出表头效果;③利用protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)事件,在生成客户端的html时,生成需要的表格。

注意:这些操作,都是放在gridview绑定完数据这后执行,即放在Gridview1.DataSource=dt;Gridview1.Databind();之后执行。数据的列为自动绑定,没有为每列指定要绑定的字段(AutoGenerateColumns属性为true,默认)。

道理讲完了,是不是想动手了,现在开始吧。

步1、将一个gridview控件拖放在页面上

步2、实现多表头

方法1:(适用于多行)

多行表头

看完了效果,再来看看代码吧

     private void AddHeader()//为gridview添加表头
    {
        if (GridView1.Rows.Count > 0)
        {
            GridView1.HeaderRow.Cells.Clear();
            GridView1.HeaderRow.Visible = false;
        }
        Table tbl = (Table)GridView1.Controls[0];

        #region 添加三行表头
        string ssql = "SELECT coltitle1,coltitle2,coltitle3 FROM Xt_Grid where (Grid_Code = 'CB_CostCollect')";
        DataSet dgrid = DbHelperSQL.Query(ssql);
        if (dgrid.Tables[0].Rows.Count > 0)
        {
            GridViewRow header0 = new GridViewRow(0, 0, DataControlRowType.Header, DataControlRowState.Normal);
            GridViewRow header1 = new GridViewRow(1, 1, DataControlRowType.Header, DataControlRowState.Normal);
            GridViewRow header2 = new GridViewRow(2, 2, DataControlRowType.Header, DataControlRowState.Normal);
            for (int i = 0; i < dgrid.Tables[0].Rows.Count; i++)
            {
                header0.Cells.Add(new TableCell());
                header0.Cells[i].Wrap = false;
                header0.Cells[i].Text = dgrid.Tables[0].Rows[i]["coltitle1"].ToString().Trim();

                header1.Cells.Add(new TableCell());
                header1.Cells[i].Wrap = false;
                header1.Cells[i].Text = dgrid.Tables[0].Rows[i]["coltitle2"].ToString().Trim();

                header2.Cells.Add(new TableCell());
                header2.Cells[i].Wrap = false;
                header2.Cells[i].Text = dgrid.Tables[0].Rows[i]["coltitle3"].ToString().Trim();
            }
            tbl.Controls.AddAt(0, header0);
            tbl.Controls.AddAt(1, header1);
            tbl.Controls.AddAt(2, header2);
        }
        #endregion

        #region 合并表头
        for (int i = 0; i < dgrid.Tables[0].Rows.Count; i++)
        {//合并行
            TableCell oldtc = tbl.Rows[0].Cells[i];
            for (int j = 1; j < 3; j++)
            {
                TableCell newtc = tbl.Rows[j].Cells[i];
                if (newtc.Text == oldtc.Text)
                {
                    newtc.Visible = false;
                    if (oldtc.RowSpan == 0)
                    {
                        oldtc.RowSpan = 2;
                        oldtc.VerticalAlign = VerticalAlign.Middle;
                    }
                    else
                    {
                        oldtc.RowSpan = oldtc.RowSpan + 1;
                        oldtc.VerticalAlign = VerticalAlign.Middle;
                    }
                }
            }
        }
        for (int i = 0; i < 2; i++)
        {//合并列
            TableCell oldtc = tbl.Rows[i].Cells[0];
            for (int j = 1; j < dgrid.Tables[0].Rows.Count - 1; j++)
            {
                TableCell newtc = tbl.Rows[i].Cells[j];
                if (newtc.Text == oldtc.Text)
                {
                    newtc.Visible = false;
                    if (oldtc.ColumnSpan == 0)
                    {
                        oldtc.ColumnSpan = 2;
                        oldtc.HorizontalAlign = HorizontalAlign.Center;
                    }
                    else
                    {
                        oldtc.ColumnSpan++;
                        oldtc.HorizontalAlign = HorizontalAlign.Center;
                    }
                }
                else
                {
                    oldtc = newtc;
                }
            }
        }
        #endregion
    }

注意:表头的名称存放在了自建的一个表xt_grid里面,对应的字段分别是:第一行表头-ColTitle1,第二行表头-ColTitle2,第三行表头-ColTitle3。

说明:①清除、隐藏原来的表头;②通过GridView1.Controls[0]获取Table对象;③查找表头信息,此处为三行,循环生成GridViewRow对象,类型为头(header),并添加到table中;④循环合并行,列。

方法二(为Gridview控件添加多行表头(之二))

方法三(为Gridview控件添加多行表头(之三))

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
要在布局文件中添加GridView控件,可以按照以下步骤进行: 1. 打开你的布局文件(通常是xml文件)。 2. 在布局文件中找到你想要添加GridView控件的位置。 3. 在该位置添加GridView控件的标签,如下所示: ``` <GridView android:id="@+id/gridView" android:layout_width="match_parent" android:layout_height="wrap_content" android:numColumns="3" android:verticalSpacing="10dp" android:horizontalSpacing="10dp" android:stretchMode="columnWidth" android:gravity="center" android:padding="10dp" /> ``` 在这个标签中,我们指定了GridView的id为gridView,宽度为match_parent(填满父容器),高度为wrap_content(根据内容自适应高度),每行显示3个item,垂直间距为10dp,水平间距为10dp,item的宽度会根据列数自动进行调整,item的位置居中,padding为10dp。 4. 在GridView添加item布局(可以是自定义的布局或系统提供的布局),如下所示: ``` <GridView android:id="@+id/gridView" android:layout_width="match_parent" android:layout_height="wrap_content" android:numColumns="3" android:verticalSpacing="10dp" android:horizontalSpacing="10dp" android:stretchMode="columnWidth" android:gravity="center" android:padding="10dp"> <ImageView android:id="@+id/imageView" android:layout_width="match_parent" android:layout_height="wrap_content" android:src="@drawable/image" /> </GridView> ``` 在这个标签中,我们在GridView添加了一个ImageView作为item布局,ImageView的id为imageView,宽度为match_parent,高度为wrap_content,显示的图片为@drawable/image(注意要将image替换为你自己的图片名称)。 5. 最后,根据你的需求在代码中操作GridView控件。 以上是在布局文件中添加GridView控件的基本步骤,你可以根据具体情况进行调整和修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值