GridView 后台排列 Column 、 用户自定义GridView 显示、GridView的PreRender ,Init,Load 方法

项目到了末期,用户竟然来了个小变态,说要自定义所有GridView显示的列,也就是说用户可以去控制GridView显示的列数,列的排序,OK ,我的Boss 把这个光荣的任务交给我了,我很荣幸。

由于项目的保密原因,很细节的东西我就不写了,我写些技术上的东西给大家分享。

<script type=text/javascript> </script> <script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type=text/javascript> </script>

首先,设计了两张表,1对多的关系,一个表记录的是用户自定义的哪个GridView,一个表记录的是这个GridView都自定义了哪些列。

主要是GridView 的 Column 排序问题,我们目前的状况是 大概有50 - 60个GridView 用户需要自定义,而且,先前的GridView 都已经绑定好了。大概考虑了一天,我选择后台自动生成Column 列,前台的 <asp:boundFiled> 这些列都注释掉。

自动生成的话简单了,new 一个 BoundField 然后 设置他的属性,然后添加到 GridView的Columns里面。

第一个用例做好以后,发现一个问题,模板列如何自动生成??。模板列里有的是button 有的是Label  有的是 <a href>标签。我后台没办法知道,而且这个随意性很大,不好控制(除非把模板列想办法存到数据库里),X 我疯了这样做。

于是想办法先按照原样绑定,绑定后,在根据用户设置去摆弄GridView的列,因为绑定好的GridView模板列已经绑定好了,只需要做做其他改动就ok了,我便写了个方法在GridView PreRender,写完之后发现可行,但是问题是翻页之后,原先绑定的模板列没有数据了,而且他的普通绑定还有数据(我的翻页用的是GridView自带的)。

我跟踪调试发现,单击翻页的时候,这个时候GridView 里面的模板列的值都是Null ,其他的没有变,也就是说,单击翻页的时候,我断点里面的GridView的Columns[0]这里面是null(所有的模板列), 而且他的普通绑定都ok。

我想了想。其实http是无状态的,asp.net 的有状态做法是因为他把控件的属性应藏到了javascript里面和<input hidden>标签里面,这样就说明,在第一次数据按前台绑定后,这段javascript和<input hidden>已经生成好了,我又重新摆弄了一下列的位置,这种状态当然在第二次回传的时候也就对应不了了,所以,这个地方都是null了。

<script type=text/javascript> </script> <script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type=text/javascript> </script>

PreRender是在GridView展示之前调用的事件,我在这里摆弄,明显数据已经绑定好了后发生的事情。

Load 就是在数据加载的时候调用的,试过了,也不行

Init 这个就好了,因为他是在前台页面构建GridView时调用的,先把我的Column重新排序,然后生成javascript和<input hidden> 然后在绑定列 ok!。就是这么简单!哈哈

但是要注意,页面每次回传都会调用这个Init方法,所以要谨慎一点,例如你单击按钮什么的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值