日期:2014-05-17  浏览次数:20423 次

Asp.net 为GridView增加一行表头。标题


比如说这个GridView,ID 船名 航次 提单号 ,就是跨这几列,这这几列上面增加一行标题,比如,“基本信息”。然后,后面几列类别: 预配舱单状态 中心收到时间 预配舱单报文号 海关回执 的标题,比如为 “预配舱单海关回执详细信息”。不能用JS ,就是GridView,不用Table。

------解决方案--------------------
在gridview的RowCreated事件中绘制表头。
http://www.cnblogs.com/scy251147/archive/2011/02/13/1953170.html
------解决方案--------------------
最好不要破坏GridView的原始的内容。例如GridView会自动为标题列产生“排序”等等各种控制机制,如果你过早地自己写这一行,破坏GridView原本应该产生的内容,得不偿失!

你可以尽量晚地“添加”标题行,也就是在Render过程已经开始之后,在RenderControls开始之前,才处理标题行。

例如,可以用自己的GridView替代原来的GridView,例如
using System.Drawing;
using System.Web.UI.WebControls;

namespace MyControls
{
    public class GridView : System.Web.UI.WebControls.GridView
    {
        protected override void RenderContents(System.Web.UI.HtmlTextWriter writer)
        {
            var table = (Table)this.Controls[0];
            var row = new TableRow();
            table.Rows.AddAt(0, row);
            var cell = new TableHeaderCell { Text = "组标题1", ColumnSpan = 2, BackColor = Color.AliceBlue };
            row.Cells.Add(cell);
            cell = new TableHeaderCell { Text = "组标题2", ColumnSpan = 2, CssClass = "titleStyle2" };
            row.Cells.Add(cell);
            cell = new TableHeaderCell { Text = "标题3" };
            row.Cells.Add(cell);
            base.RenderContents(writer);
        }
    }
}


然后,在你的页面(或者ascx)上写上
<%@ Register TagPrefix="mc" Namespace="MyControls" %>


并将
<ASP:GridView ....
改为
<mc:GridView ....
即可。
------解决方案--------------------