cy9934303 cy9934303
关注数: 29 粉丝数: 30 发帖数: 273 关注贴吧数: 6
GridView自动生成列,当表头开启自动排序后获取表头名的方法 问题描述:GridView如果是数据库绑定自动生成列,而且AllowSorting="True"自动排序开启,那么GridView1.Columns得到的列数是0,而且GridView1.HeaderRow.cells(i)也得不到表头的名称。 在网上也没看到合适的解决方案,研究几个小时终于解决,分享出来。 解决办法: 造成这个问题的原因很简单,当开启自动排序后表头其实就变成了多个控件的组合单元格了,最底层的框为LinkButton。而这个在前台页面看不到。 所以我们可以利用HeaderRow下的.Controls来解决。 Dim kk As WebControls.LinkButton = GridView1.HeaderRow.Controls(i).Controls(0) 用kk.text 就可以获取到表头。 GridView1.HeaderRow.Controls(i)这个Controls是DataControlFieldHeaderCell类控件,是HeaderRow下第一层子控件,i是列号。 GridView1.HeaderRow.Controls(i).Controls(0)这个Controls是DataControlLinkButton类控件,是HeaderRow下第二层子控件,也是存放表头名的地方。 延伸用法:比如GridView必须从数据生成列,而列数是经过筛选的,在自动排序开启的情况下为每行单独设置列宽。 Private Sub GridView1_RowCreated(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowCreated For i = 0 To e.Row.Cells.Count - 1‘从第一列开始设置 Try Dim kk As WebControls.LinkButton= GridView1.HeaderRow.Controls(i).Controls(0) Select Case kk.Text Case "序号" : e.Row.Cells(i).Width = 40 Case "姓名" : e.Row.Cells(i).Width = 80 Case "年龄" : e.Row.Cells(i).Width = 30 ’要留一个字段列宽不设置,不然会自动调整所有列宽 End Select Catch ex As Exception End Try Next End Sub
1 下一页