GridView 后台排列 Column 、 用户自定义GridView 显示、GridView的PreRender ,Init,Load 方法
2008-12-25 09:18
477 查看
项目到了末期,用户竟然来了个小变态,说要自定义所有GridView显示的列,也就是说用户可以去控制GridView显示的列数,列的排序,OK ,我的Boss 把这个光荣的任务交给我了,我很荣幸。
由于项目的保密原因,很细节的东西我就不写了,我写些技术上的东西给大家分享。
首先,设计了两张表,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了。
PreRender是在GridView展示之前调用的事件,我在这里摆弄,明显数据已经绑定好了后发生的事情。
Load 就是在数据加载的时候调用的,试过了,也不行
Init 这个就好了,因为他是在前台页面构建GridView时调用的,先把我的Column重新排序,然后生成javascript和<input hidden> 然后在绑定列 ok!。就是这么简单!哈哈
但是要注意,页面每次回传都会调用这个Init方法,所以要谨慎一点,例如你单击按钮什么的
由于项目的保密原因,很细节的东西我就不写了,我写些技术上的东西给大家分享。
首先,设计了两张表,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了。
PreRender是在GridView展示之前调用的事件,我在这里摆弄,明显数据已经绑定好了后发生的事情。
Load 就是在数据加载的时候调用的,试过了,也不行
Init 这个就好了,因为他是在前台页面构建GridView时调用的,先把我的Column重新排序,然后生成javascript和<input hidden> 然后在绑定列 ok!。就是这么简单!哈哈
但是要注意,页面每次回传都会调用这个Init方法,所以要谨慎一点,例如你单击按钮什么的
相关文章推荐
- yii2-basic后台管理功能开发之三:自定义GridView列显示
- Vue实现用户自定义字段显示数据的方法
- 让GridView只显示特定用户的数据的方法
- 织梦联动地区后台自定义表单列表中显示为数字的真正解决方法
- dev GridView 自定义显示文本 CustomColumnDisplayText
- 后台实现显示欢迎用户登陆的方法
- GridView判断使文字显示不同的颜色的两种方法:1前右判断;2.后台判断
- onethink后台添加自定义菜单不显示的解决方法
- onethink后台添加自定义菜单不显示的解决方法(转)
- 让GridView只显示特定用户的数据的方法
- 使用jquery的autocomplete的方法,进行用户自定义的显示列表方法给用户
- gridview 自定义分页显示数据处理方法
- 后台实现显示欢迎用户登陆的方法
- 后台div 显示 另外一种方法
- NC添加自定义显示公式方法
- html在一行内横向排列并排同行同时显示两个多个div盒子的方法(CSS浮动清除float-clear/inline)/办法
- 自定义UITableViewCell不能显示圆角的解决方法
- php使用cookie显示用户上次访问网站日期的方法
- Asp.Net实现无限分类生成表格的方法(后台自定义输出table)
- 对gridview绑定数据的操作方法,自定义显示内容