Wijmo 更优美的jQuery UI部件集:在对Wijmo GridView进行排序或者过滤时保留选择

简介:

许多客户面临这样的场景,他们希望在应用了排序或者过滤之后仍然将最终用户的行选状态保留。通常情况下,当我们在选择了任何行之后应用排序或者过滤会导致回传之后选择状态丢失。本篇博客将讨论我们如何做才能在排序和过滤之后让冉保持选择状态。

image

 

步骤1:将GridView绑定到一张数据表

首先,我们需要将gridview绑定到一个数据表,比如来自Northwind数据库的Categories表。由于我们用的是服务器端的选择,我们需要将AutoGenerateSelectButton属性设置为“True”,然后将“ClientSelectionMode”属性设置为“None”。否则,我们将同时具有客户端和服务器端两个选择。

此外,我们还需要设置AllowSorting 以及 ShowFilter 属性值为“True”以便允许在gridview上执行排序或者过滤。以下是.aspx页面的源代码:

 


 
 
  1. <wijmo:C1GridView ID="C1GridView1" runat="server" AllowSorting="True" ClientSelectionMode="None" 
  2.  
  3. AutogenerateColumns="False" AutoGenerateSelectButton="True" 
  4.  
  5. DataKeyNames="CategoryID" DataSourceID="AccessDataSource1" 
  6.  
  7. ShowFooter="False" ShowFilter="True"> 
  8.  
  9. <Columns> 
  10.  
  11. <wijmo:C1BoundField DataField="CategoryID" HeaderText="CategoryID" 
  12.  
  13. ReadOnly="True" SortExpression="CategoryID"> 
  14.  
  15. </wijmo:C1BoundField> 
  16.  
  17. <wijmo:C1BoundField DataField="CategoryName" HeaderText="CategoryName" 
  18.  
  19. SortExpression="CategoryName"> 
  20.  
  21. </wijmo:C1BoundField> 
  22.  
  23. <wijmo:C1BoundField DataField="Description" HeaderText="Description" 
  24.  
  25. SortExpression="Description"> 
  26.  
  27. </wijmo:C1BoundField> 
  28.  
  29. <wijmo:C1BoundField DataField="Picture" HeaderText="Picture" 
  30.  
  31. SortExpression="Picture"> 
  32.  
  33. </wijmo:C1BoundField> 
  34.  
  35. <wijmo:C1BoundField DataField="UserName" HeaderText="UserName" 
  36.  
  37. SortExpression="UserName"> 
  38.  
  39. </wijmo:C1BoundField> 
  40.  
  41. </Columns> 
  42.  
  43. </wijmo:C1GridView> 
  44.  
  45. <asp:AccessDataSource ID="AccessDataSource1" runat="server" 
  46.  
  47. DataFile="~/App_Data/C1NWind.mdb" 
  48.  
  49. SelectCommand="SELECT * FROM [Categories]"> 
  50.  
  51. </asp:AccessDataSource> 

 

7.1

 

步骤2 保存选中的行

我们需要在一个ViewState对象中保存选中行的数据键值,使得我们可以使用它再次设置选择。因此我们需要处理SelectedIndexChanged事件。在此事件中使用到的代码片断如下:

 


 
 
  1. Protected Sub C1GridView1_SelectedIndexChanged(sender As Object, e As System.EventArgs) Handles C1GridView1.SelectedIndexChanged 
  2.  
  3. ' 保存选中数据行的数据键值 
  4.  
  5. If (Not C1GridView1.SelectedIndex = -1) Then 
  6.  
  7. ViewState("SelectedValue") = C1GridView1.SelectedValue 
  8.  
  9. End If 
  10.  
  11. End Sub 

 

步骤3:重新设置选中的行索引

我们需要在排序或者过滤完成,重新执行选择动作之前,重新设置gridviewSelectedIndex属性。这项工作可以在Sorting或者Filtering事件中通过以下代码片断完成:

 


 
 
  1. Protected Sub C1GridView1_Sorting(sender As Object, e As C1.Web.Wijmo.Controls.C1GridView.C1GridViewSortEventArgs) Handles C1GridView1.Sorting 
  2.  
  3. ' 重置选择索引 
  4.  
  5. C1GridView1.SelectedIndex = -1 
  6.  
  7. End Sub 
  8.  
  9. Protected Sub C1GridView1_Filtering(sender As Object, e As C1.Web.Wijmo.Controls.C1GridView.C1GridViewFilterEventArgs) Handles C1GridView1.Filtering 
  10.  
  11. '重置选择索引 
  12.  
  13. C1GridView1.SelectedIndex = -1 
  14.  
  15. End Sub 

 

步骤4:重新选中该行

由于gridview会在回传时(由于执行了排序或者过滤时发生)进行了重新绑定,我们需要处理DataBound事件以重新设置选择。在此,我们应当检查原始选中的行是否可见,之后通过ViewState对象对其进行重新选择。代码片断如下所示:

 


 
 
  1. Protected Sub C1GridView1_DataBound(sender As Object, e As System.EventArgs) Handles C1GridView1.DataBound 
  2.  
  3. Dim Row As C1GridViewRow 
  4.  
  5. Dim SelectedValue As String = ViewState("SelectedValue"
  6.  
  7. If SelectedValue Is Nothing Then 
  8.  
  9. Return 
  10.  
  11. End If 
  12.  
  13. ' 检查选中的行是否可见,并且重新对其进行选择。 
  14.  
  15. For Each Row In C1GridView1.Rows 
  16.  
  17. Dim KeyValue As String = C1GridView1.DataKeys(Row.RowIndex).Value 
  18.  
  19. If (KeyValue = SelectedValue) Then 
  20.  
  21. C1GridView1.SelectedIndex = Row.RowIndex 
  22.  
  23. End If 
  24.  
  25. Next 
  26.  
  27. End Sub 

 

7.2

请参见附件中完整的示例。



本文转自 powertoolsteam 51CTO博客,原文链接:http://blog.51cto.com/powertoolsteam/844723,如需转载请自行联系原作者

相关文章
|
JSON 前端开发 JavaScript
【前端】使用jQuery封装一套UI组件 - 级联选择器组件
本篇文章来讲解下级联选择器组件 级联选择器,在实际项目中也是比较常用的组件,比如:省市区三级关联,上下级联动等 最后面会附上全部代码
1340 0
element-ui table排序sortable三种状态,怎么去掉默认状态
在 element-ui 中,也定义了 sort-orders 有三种状态: ascending、descending、null,这三种状态形成一个循环切换。
2657 0
|
6月前
|
Web App开发 缓存 JavaScript
JQuery Kendo UI使用技巧总结
JQuery Kendo UI使用技巧总结
42 4
|
6月前
|
API Android开发 开发者
`RecyclerView`是Android API 21引入的UI组件,用于替代ListView和GridView
【6月更文挑战第26天】`RecyclerView`是Android API 21引入的UI组件,用于替代ListView和GridView。它提供高效的数据视图复用,优化的布局管理,支持多种布局(如线性、网格),并解耦数据、适配器和视图。RecyclerView的灵活性、性能(如局部刷新和动画支持)和扩展性使其成为现代Android开发的首选,特别是在处理大规模数据集时。
66 2
|
7月前
基于sortablejs实现拖拽element-ui el-table表格行进行排序
基于sortablejs实现拖拽element-ui el-table表格行进行排序
|
JavaScript
VUE element-ui之table表格全局排序、调用后端接口排序功能
VUE element-ui之table表格全局排序、调用后端接口排序功能
1490 0
|
JavaScript 前端开发 程序员
【前端】使用jQuery封装一套UI组件 - 是和否滑动切换组件
本篇文章来讲解下是和否的滑动切换组件 切换滑动组件,使用的场景实际上就是一个开和关的场景,一般有是和否,开和关,禁用和启用等等,只需要设置0和1即可
151 0
|
JavaScript 前端开发 程序员
【前端】使用jQuery封装一套UI组件 - 可编辑下拉框组件
下拉框也是比较常用的组件,对应原生的下拉标签就是select 本篇文章就来讲讲可编辑下拉框组件的封装过程
367 0
|
JavaScript 前端开发 程序员
【前端】使用jQuery封装一套UI组件 - 移动端时间选择组件
【首先要声明一点,技术不分好坏,能用好就行,不用鄙视老技术】 今天要给大家展示的是移动端时间选择组件 最开始,看到比较新颖的移动端时间选择组件是在某款手机上,分年月日下拉选择,UI界面也挺好看的 除了讲解实现的步骤以及关键点,文章最后面会有完整的代码
245 0
|
前端开发 JavaScript 程序员
【前端】使用jQuery封装一套UI组件 - 单选框
目前前端技术发展非常快,各大厂都开源和分享了自家的前端框架,非常多成熟的UI组件供大家选择,很实用也很方便,给开发上节省了不少时间成本,当然少不了学习成本,不过也不会占用太多时间,只要有前端基础的话,原理基本都是通用的,只是写法不一样。 因此,除了学习现有的优秀前端之外,最好能自己根据原理封装一套自己的UI组件,目的是为了更好的理解前端知识点以及锻炼编程逻辑
170 0

相关课程

更多