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,如需转载请自行联系原作者

相关文章
|
8月前
element-ui Pagination分页只保留上一页下一页
有时数据量太大,比如日志数据没必要查看很久之前的,所以把页数屏蔽,不给系统造成卡顿,最简单的方式就是隐藏总条数、页数。具体做法来看一下吧
159 0
element-ui table排序sortable三种状态,怎么去掉默认状态
在 element-ui 中,也定义了 sort-orders 有三种状态: ascending、descending、null,这三种状态形成一个循环切换。
2181 0
|
17天前
基于sortablejs实现拖拽element-ui el-table表格行进行排序
基于sortablejs实现拖拽element-ui el-table表格行进行排序
|
6月前
|
开发者
SAP UI5 初学者教程之二十三 - 列表控件的排序 Sort 和分组 Group 试读版
SAP UI5 初学者教程之二十三 - 列表控件的排序 Sort 和分组 Group 试读版
34 0
|
7月前
|
Web App开发 前端开发 JavaScript
SAP UI5 应用开发教程之六十四 - 基于 OData V4 的 SAP UI5 表格控件如何实现 filter(过滤) 和 sort(排序)功能试读版
SAP UI5 应用开发教程之六十四 - 基于 OData V4 的 SAP UI5 表格控件如何实现 filter(过滤) 和 sort(排序)功能试读版
38 0
SAP UI5 应用开发教程之六十四 - 基于 OData V4 的 SAP UI5 表格控件如何实现 filter(过滤) 和 sort(排序)功能试读版
|
JavaScript
VUE element-ui之table表格全局排序、调用后端接口排序功能
VUE element-ui之table表格全局排序、调用后端接口排序功能
1209 0
|
前端开发 图形学
Unity中影响UI排序的组件
Unity中影响UI排序的组件
|
XML JSON 自然语言处理
SAP UI5 初学者教程之二十三 - 列表控件的排序 Sort 和分组 Group 试读版
SAP UI5 初学者教程之二十三 - 列表控件的排序 Sort 和分组 Group 试读版
136 0
SAP UI5 初学者教程之二十三 - 列表控件的排序 Sort 和分组 Group 试读版