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组件 - 级联选择器组件
本篇文章来讲解下级联选择器组件 级联选择器,在实际项目中也是比较常用的组件,比如:省市区三级关联,上下级联动等 最后面会附上全部代码
1203 0
|
5月前
jquery-easyui和jquery-ui的slider冲突解决
jquery-easyui和jquery-ui的slider冲突解决
|
JavaScript 前端开发 程序员
【前端】使用jQuery封装一套UI组件 - 是和否滑动切换组件
本篇文章来讲解下是和否的滑动切换组件 切换滑动组件,使用的场景实际上就是一个开和关的场景,一般有是和否,开和关,禁用和启用等等,只需要设置0和1即可
118 0
|
JavaScript 前端开发 程序员
【前端】使用jQuery封装一套UI组件 - 可编辑下拉框组件
下拉框也是比较常用的组件,对应原生的下拉标签就是select 本篇文章就来讲讲可编辑下拉框组件的封装过程
330 0
|
JavaScript 前端开发 程序员
【前端】使用jQuery封装一套UI组件 - 移动端时间选择组件
【首先要声明一点,技术不分好坏,能用好就行,不用鄙视老技术】 今天要给大家展示的是移动端时间选择组件 最开始,看到比较新颖的移动端时间选择组件是在某款手机上,分年月日下拉选择,UI界面也挺好看的 除了讲解实现的步骤以及关键点,文章最后面会有完整的代码
201 0
|
前端开发 JavaScript 程序员
【前端】使用jQuery封装一套UI组件 - 单选框
目前前端技术发展非常快,各大厂都开源和分享了自家的前端框架,非常多成熟的UI组件供大家选择,很实用也很方便,给开发上节省了不少时间成本,当然少不了学习成本,不过也不会占用太多时间,只要有前端基础的话,原理基本都是通用的,只是写法不一样。 因此,除了学习现有的优秀前端之外,最好能自己根据原理封装一套自己的UI组件,目的是为了更好的理解前端知识点以及锻炼编程逻辑
131 0
|
JavaScript 前端开发 索引
jQuery选择器之过滤选择器
jQuery选择器之过滤选择器
163 11
|
JavaScript 开发者 索引
jQuery_基础过滤|学习笔记
快速学习 jQuery_基础过滤
223 0
jQuery_基础过滤|学习笔记
|
JavaScript 前端开发 索引
jQuery选择集过滤
选择集过滤就是在选择标签的集合里面过滤自己需要的标签
97 0
|
JavaScript 前端开发 开发者
jQuery 遍历_过滤3|学习笔记
快速学习 jQuery 遍历_过滤3
156 0
jQuery 遍历_过滤3|学习笔记

相关课程

更多