VB.NET中自定义GridView的多行复合表头

我们都知道单行表头的合并是很好实现的,只需室友横跨列的ColumnSpan属性就可以实现,

但是在开发中,经常遇到表格的多行复合表头设计的问题,怎么扩展GridView控件以实现多行表头呢?

­要点:先定义第一行各占多少行,多少列,再追加第二行,以此类推

主体思路是这样的,GridView在ASP.NET中最终是转化为html的表格格式来显示的,所以我们要在其中做点文章,

看下面这段代码:

  1         ‘‘‘ <summary>
  2         ‘‘‘ 画面レイアウトより、GridViewのヘッダを設定
  3         ‘‘‘ </summary>
  4         ‘‘‘ <param name="sender">イベント発生源のオブジェクト</param>
  5         ‘‘‘ <param name="e">イベントに関連する補足情報</param>
  6         ‘‘‘ <remarks></remarks>
  7         Protected Sub dgv_bukken_data_RowCreated(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles dgv_bukken_data.RowCreated
  8             If e.Row.RowType = DataControlRowType.Header Then
  9
 10                 Dim tcHeader As TableCellCollection = e.Row.Cells
 11                 ‘GridViewのヘッダを削除
 12                 tcHeader.Clear()
 13                 ‘一目ヘッダを設定
 14                 tcHeader.Add(New TableHeaderCell())
 15                 tcHeader(0).Attributes.Add("rowspan", "2")
 16                 tcHeader(0).CssClass = "ankClm"
 17                 tcHeader(0).Attributes.Add("bgcolor", "#EFF3FB")
 18                 tcHeader(0).Font.Bold = False
 19                 tcHeader(0).Style.Add("font-size", "12px")
 20                 tcHeader(0).Text = "対象<br />物件"
 21
 22                 tcHeader.Add(New TableHeaderCell())
 23                 tcHeader(1).Attributes.Add("rowspan", "2")
 24                 tcHeader(1).CssClass = "ankClm"
 25                 tcHeader(1).Attributes.Add("bgcolor", "#EFF3FB")
 26                 tcHeader(1).Font.Bold = False
 27                 tcHeader(1).Style.Add("font-size", "12px")
 28                 tcHeader(1).Style.Add("text-align", "left")
 29                 tcHeader(1).Text = "住宅種類"
 30
 31                 tcHeader.Add(New TableHeaderCell())
 32                 tcHeader(2).Attributes.Add("colspan", "4")
 33                 tcHeader(2).CssClass = "ankClm"
 34                 tcHeader(2).Attributes.Add("bgcolor", "#EFF3FB")
 35                 tcHeader(2).Font.Bold = False
 36                 tcHeader(2).Style.Add("font-size", "12px")
 37                 tcHeader(2).Style.Add("text-align", "left")
 38                 tcHeader(2).Text = "構造?規模"
 39
 40                 tcHeader.Add(New TableHeaderCell())
 41                 tcHeader(3).Attributes.Add("colspan", "5")
 42                 tcHeader(3).CssClass = "ankClm"
 43                 tcHeader(3).Attributes.Add("bgcolor", "#EFF3FB")
 44                 tcHeader(3).Font.Bold = False
 45                 tcHeader(3).Style.Add("font-size", "12px")
 46                 tcHeader(3).Style.Add("text-align", "left")
 47                 tcHeader(3).Text = "賃貸住戸"
 48
 49                 tcHeader.Add(New TableHeaderCell())
 50                 tcHeader(4).Attributes.Add("colspan", "2")
 51                 tcHeader(4).CssClass = "ankClm"
 52                 tcHeader(4).Attributes.Add("bgcolor", "#EFF3FB")
 53                 tcHeader(4).Font.Bold = False
 54                 tcHeader(4).Style.Add("font-size", "12px")
 55                 tcHeader(4).Style.Add("text-align", "left")
 56                 tcHeader(4).Text = "賃貸計画</td></tr><tr>"
 57                 ‘二目ヘッダを設定
 58                 tcHeader.Add(New TableHeaderCell())
 59                 tcHeader(5).CssClass = "ankClm"
 60                 tcHeader(5).Attributes.Add("bgcolor", "#EFF3FB")
 61                 tcHeader(5).Font.Bold = False
 62                 tcHeader(5).Style.Add("font-size", "12px")
 63                 tcHeader(5).Style.Add("text-align", "left")
 64                 tcHeader(5).Text = "構造"
 65
 66                 tcHeader.Add(New TableHeaderCell())
 67                 tcHeader(6).CssClass = "ankClm"
 68                 tcHeader(6).Attributes.Add("bgcolor", "#EFF3FB")
 69                 tcHeader(6).Font.Bold = False
 70                 tcHeader(6).Style.Add("font-size", "12px")
 71                 tcHeader(6).Style.Add("text-align", "left")
 72                 tcHeader(6).Text = "規模"
 73
 74                 tcHeader.Add(New TableHeaderCell())
 75                 tcHeader(7).CssClass = "ankClm"
 76                 tcHeader(7).Attributes.Add("bgcolor", "#EFF3FB")
 77                 tcHeader(7).Font.Bold = False
 78                 tcHeader(7).Style.Add("font-size", "12px")
 79                 tcHeader(7).Style.Add("text-align", "left")
 80                 tcHeader(7).Text = "地下有無"
 81
 82                 tcHeader.Add(New TableHeaderCell())
 83                 tcHeader(8).CssClass = "ankClm"
 84                 tcHeader(8).Attributes.Add("bgcolor", "#EFF3FB")
 85                 tcHeader(8).Font.Bold = False
 86                 tcHeader(8).Style.Add("font-size", "12px")
 87                 tcHeader(8).Style.Add("text-align", "left")
 88                 tcHeader(8).Text = "延べ面積"
 89
 90                 tcHeader.Add(New TableHeaderCell())
 91                 tcHeader(9).CssClass = "ankClm"
 92                 tcHeader(9).Attributes.Add("bgcolor", "#EFF3FB")
 93                 tcHeader(9).Font.Bold = False
 94                 tcHeader(9).Style.Add("font-size", "12px")
 95                 tcHeader(9).Style.Add("text-align", "left")
 96                 tcHeader(9).Text = "住戸1"
 97
 98                 tcHeader.Add(New TableHeaderCell())
 99                 tcHeader(10).CssClass = "ankClm"
100                 tcHeader(10).Attributes.Add("bgcolor", "#EFF3FB")
101                 tcHeader(10).Font.Bold = False
102                 tcHeader(10).Style.Add("font-size", "12px")
103                 tcHeader(10).Style.Add("text-align", "left")
104                 tcHeader(10).Text = "住戸2"
105
106                 tcHeader.Add(New TableHeaderCell())
107                 tcHeader(11).CssClass = "ankClm"
108                 tcHeader(11).Attributes.Add("bgcolor", "#EFF3FB")
109                 tcHeader(11).Font.Bold = False
110                 tcHeader(11).Style.Add("font-size", "12px")
111                 tcHeader(11).Style.Add("text-align", "left")
112                 tcHeader(11).Text = "店舗"
113
114                 tcHeader.Add(New TableHeaderCell())
115                 tcHeader(12).CssClass = "ankClm"
116                 tcHeader(12).Attributes.Add("bgcolor", "#EFF3FB")
117                 tcHeader(12).Font.Bold = False
118                 tcHeader(12).Style.Add("font-size", "12px")
119                 tcHeader(12).Style.Add("text-align", "left")
120                 tcHeader(12).Text = "事務所"
121
122                 tcHeader.Add(New TableHeaderCell())
123                 tcHeader(13).CssClass = "ankClm"
124                 tcHeader(13).Attributes.Add("bgcolor", "#EFF3FB")
125                 tcHeader(13).Font.Bold = False
126                 tcHeader(13).Style.Add("font-size", "12px")
127                 tcHeader(13).Style.Add("text-align", "left")
128                 tcHeader(13).Text = "駐車場"
129
130                 tcHeader.Add(New TableHeaderCell())
131                 tcHeader(14).CssClass = "ankClm"
132                 tcHeader(14).Attributes.Add("bgcolor", "#EFF3FB")
133                 tcHeader(14).Font.Bold = False
134                 tcHeader(14).Style.Add("font-size", "12px")
135                 tcHeader(14).Style.Add("text-align", "left")
136                 tcHeader(14).Text = "査定家賃計"
137
138                 tcHeader.Add(New TableHeaderCell())
139                 tcHeader(15).CssClass = "ankClm"
140                 tcHeader(15).Attributes.Add("bgcolor", "#EFF3FB")
141                 tcHeader(15).Font.Bold = False
142                 tcHeader(15).Style.Add("font-size", "12px")
143                 tcHeader(15).Style.Add("text-align", "left")
144                 tcHeader(15).Text = "家賃保障"
145             End If
146         End Sub
147 #End Region

1.判断创建的行是不是标题行,是标题行就进行操作

If e.Row.RowType = DataControlRowType.Header Then

2.清除自动生成的表头

tcHeader.Clear()

3.设计你的第一行表头

4.最重要的也是核心思想,其实在生成的html中tcHeader(4).Text转化为:<td>賃貸計画</td>,单行表头是以<tr>开始,</tr>结束,所以依照该原则主动注入html的行结束标签</tr>和第二行开始的标签<tr>来实现,原理有些类似于SQL注入攻击

tcHeader(4).Text = "賃貸計画</td></tr><tr>"

5.实现的效果图

VB.NET中自定义GridView的多行复合表头

时间: 2024-10-13 11:26:56

VB.NET中自定义GridView的多行复合表头的相关文章

在ScrollView中自定义GridView无法显示全部的问题的解决

新建类,继承自GridView,重写onMeasure()方法 public class MyGridView extends GridView { public MyGridView(Context context, AttributeSet attrs) { super(context, attrs); } public MyGridView(Context context) { super(context); } public MyGridView(Context context, Att

ASP.NET—014:Gridview复合表头

继续看一个简单的ASP.NET应用.Gridview相信大家使用的比较多了,一般对多行数据进行展示和操作都会用到这个控件.而对于表头,也是很重要的一部分,它负责对数据进行分门别类的.而对于复合表头该如何展示呢?这个也挺简单的.显示复合表头,一般可以在后台通过代码实现.对于表头是由多个Header控件组成的,一般默认的一个Header显示一列.而对于复合表头就是将Header进行设置,让它占用多列或者多行.或者增加很多个Header,然后每个Header分别占用多列或者多行就可以了.来看一个复合的

获取GridView中RowCommand的当前索引行

原文:http://blog.csdn.net/sabty/article/details/4816160 获取GridView中RowCommand的当前索引行 前台添加一模版列,里面添加一个LinkButton 前台 (如果在后台代码中用e.CommandArgument取值的话前台代码就必须在按钮中设置CommandArgument的值,值为绑定的数据库字段 <asp:TemplateField HeaderText="操作"> <ItemTemplate>

GridView中根据CheckBox选中的行取出某列的值

根据CheckBox选中的行取出某列的值: for (int i = 0; i < this.GridView1.Rows.Count; i++) { CheckBox ckb = (CheckBox)this.GridView1.Rows[i].Cells[0].FindControl("CheckBox1"); if (ckb.Checked) { huohao =Convert.ToInt32(this.GridView1.Rows[i].Cells[2].Text); s

android ScrollView中嵌套GridView,ListView只显示一行的解决办法

注:本文是由网上大神分享的解决方案汇集而成 方法一: 重写ListView.GridView: 重写ListView: 1 public class MyListView extends ListView { 2 3 public MyListView(Context context) { 4 // TODO Auto-generated method stub 5 super(context); 6 } 7 8 public MyListView(Context context, Attrib

PullToRefreshScrollView实现顶层搜索框 滑动可隐藏 下面刷自定义GridView

最近项目里有个需求,要求用GridView去显示商品,滑动到底部下拉能加载更多商品,向下滑动过程中需要隐藏掉自定义的Action(搜索框)布局,向上滑动能显示出来,整体效果类似淘宝APP搜索结果页那样. 起初觉得挺简单的,但是后来才发现还是得转一点脑子.最开始我想用PullToRefreshGridView,但是后来发现GridView没有添加headview的方法,只能采用PullToRefreshScrollView内嵌套GridView的方法,Scrollview里多放一个空白布局当Gri

PB中自定义事件ID含义

PB中自定义事件ID含义 单选或多选按钮消息(前缀:pbm_bm) pbm_bmgetcheck 单选按钮或多选按钮是否被选. pbm_bmgetstate 按钮是否加亮. pbm_bmsetcheck 将无线按钮或确认框的选中状态改为未选中状态,反之亦然. pbm_bmsetstate 加亮或不加亮按钮. pbm_bmchange 改变按钮的风格,例如,改为单选按钮或组合框. 单选或多选按钮通知消息(前缀:pbm_bn) pbm_bnclicked 按钮控件被点中. pbm_bndisable

ListView中镶嵌GridView实现时间线功能问题总汇

看了网上的时间线,基本都非常的差劲,不如自己写一个,实现的效果如下,在实现的过程中遇到了2个大的问题:1.gridView显示不全2.listview的item不可点击,那么下面写出我解决这两个问题的办法 一.GridView显示不全的问题 GridView 显示不全是因为ListView和GridView都是可以滚动的,在android中不可以在一个可以滚动的控件中镶嵌另一个可以滚动的控件,那么我们可以通过自定义GridView设置为不滚动. MyGridView import android

Android开发:自定义GridView/ListView数据源

http://mobile.51cto.com/android-259861.htm 在开发中,我们常常会遇到比较复杂的GridView/ListView的布局,重新实现BaseAdapter不但能帮助我们实现我们想要的布局效果,并且在绑定大数据量时也不会感觉有卡壳现象.记得以前用一个ListView直接去绑定手机内的联系人Cursor(一百多号人),滑动的时候就会有卡的感觉.今天决定写个Demo是因为在项目中可能会要实现这样的一个效果:一个GridView中绑定4个ImageButton,有些