在 GridView 中通过分页维护排序

2024-03-16

我目前正在尝试编写代码,以便在更改 GridView 上的页面时保持排序首选项。我当前的代码运行良好,可以根据用户的排序选择对数据进行排序。但是当换页时,排序不起作用。我没有收到错误,而是收到未排序的结果。

这是我的 aspx 代码:

<asp:GridView ID="tblAdministrators" runat="server" AutoGenerateColumns="false" EmptyDataText="No records found" PageSize="75" AllowPaging="True" AllowSorting="True">

  <Columns>
    <asp:BoundField HeaderText="Name" InsertVisible="False" DataField="FULLNAME" SortExpression="FULLNAME"></asp:BoundField>
  </Columns>
  <Columns>
   <asp:BoundField HeaderText="Active" InsertVisible="False" DataField="ACTIVE" SortExpression="ACTIVE"></asp:BoundField>
  </Columns>

</asp:GridView>

这是我的 VB 代码:

Public Class ViewUsers
Inherits SolutionBasePage

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    If Not Page.IsPostBack Then
        tblAdministrators.DataSource = GetData()
        tblAdministrators.DataBind()
    End If

End Sub

Private Const ASCENDING As String = " ASC"
Private Const DESCENDING As String = " DESC"

Private Function GetData() As Data.DataView

    Dim connection As OracleDBConnect = DAL.GetOracleDBConnection()
    Dim request As OracleDBRequest = Nothing
    Dim result As OracleDBResult = Nothing
    Dim trace As OracleDBChronoTrace = Nothing
    Dim status As DBStatus
    Dim sb As New StringBuilder
    Dim dv As DataView
    Dim ds As Data.DataSet = New Data.DataSet

    Try

        With sb
            .Append("SELECT FULLNAME, ACTIVE FROM USERS")
        End With

        request = New OracleDBRequest(sb.ToString, CommandType.Text)

        status = connection.Execute(request, result, trace)

        dv = New DataView(result.DataSet.Tables(0))

        If (ViewState("sortExp") IsNot Nothing) Then
            dv = New Data.DataView(result.DataSet.Tables(0))

            If (GridViewSortDirection = SortDirection.Ascending) Then
                GridViewSortDirection = SortDirection.Descending
                dv.Sort = CType(ViewState("sortExp") & DESCENDING, String)
            Else
                GridViewSortDirection = SortDirection.Ascending
                dv.Sort = CType(ViewState("sortExp") & ASCENDING, String)
            End If
        Else
            dv = result.DataSet.Tables(0).DefaultView
        End If

        Return dv

    Catch ex As Exception

    Finally
        'ds.Dispose()
        'dp.Dispose()
    End Try

End Function

Public Property GridViewSortDirection() As SortDirection
    Get
        If ViewState("sortDir") Is Nothing Then
            ViewState("sortDir") = SortDirection.Ascending
        End If

        Return CType(ViewState("sortDir"), SortDirection)
    End Get

    Set(ByVal value As SortDirection)
        ViewState("sortDir") = value
    End Set

End Property


Protected Sub tblAdministrators_PageIndexChanging(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewPageEventArgs) Handles tblAdministrators.PageIndexChanging

    tblAdministrators.PageIndex = e.NewPageIndex
    tblAdministrators.DataSource = GetData()
    tblAdministrators.DataBind()

End Sub


Protected Sub tblAdministrators_Sorting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewSortEventArgs) Handles tblAdministrators.Sorting

    ViewState("sortExp") = e.SortExpression
    tblAdministrators.DataSource = GetData()
    tblAdministrators.DataBind()

End Sub

End Class

问题是每当您调用 GetData() 函数时,您的代码都会更改 dataview 的排序属性,即使它是由 PageIndexChaging 事件调用的。

If (GridViewSortDirection = SortDirection.Ascending) Then
    GridViewSortDirection = SortDirection.Descending
    dv.Sort = CType(ViewState("sortExp") & DESCENDING, String)
Else
    GridViewSortDirection = SortDirection.Ascending
    dv.Sort = CType(ViewState("sortExp") & ASCENDING, String)
End If

您可以修改 GetData() 函数以接受 SortDirection。然后,在 tblAdministrators_PageIndexChanging 和 tblAdministrators_Sorting 事件中,只需传递 GridViewSortDirection。像这样的事情:

Private Function GetData(sort As SortDirection) As Data.DataView
' your code here...
End Function

Protected Sub tblAdministrators_PageIndexChanging(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewPageEventArgs) Handles tblAdministrators.PageIndexChanging
    tblAdministrators.PageIndex = e.NewPageIndex
    tblAdministrators.DataSource = GetData(GridViewSortDirection)
    tblAdministrators.DataBind()
End Sub

Protected Sub tblAdministrators_Sorting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewSortEventArgs) Handles tblAdministrators.Sorting
    ViewState("sortExp") = e.SortExpression
    GridViewSortDirection = If(GridViewSortDirection = SortDirection.Descending, SortDirection.Ascending, SortDirection.Descending)
    tblAdministrators.DataSource = GetData(GridViewSortDirection)
    tblAdministrators.DataBind()
End Sub
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 GridView 中通过分页维护排序 的相关文章

  • ASP.NET 5 OAuth 不记名令牌身份验证

    我正在尝试在 ASP NET 5 中实现 OAuth 不记名令牌身份验证 并且很难找到如何执行此操作的示例 因为 OWIN 内容在 ASP NET 5 中已发生变化 例如IApplicationBuilder UseOAuthAuthori
  • http压缩和url压缩有什么区别?

    查看 Web config 中的节点 我发现它允许 httpCompression 和 urlCompression 元素 两者有什么区别 我只想执行标准 gzip 我应该使用哪一个 url压缩指定what压缩和http压缩表示how进行压
  • 无法触发我的活动

    第一次加载页面时 IsPostback 我在代码中创建一个按钮并将其添加到我的页面 然后向单击事件添加一个事件处理程序 但是 当单击按钮时 页面重新加载后 我的事件处理程序不会触发 谁能解释为什么 Brad 你的答案不完整 他很可能在页面生
  • 无法使用 C# 在 asp.net 中使用 iTextSharp API 将 HTML 标记导出为 PDF?

    我有一个HTML标记有HTML Table and Images在里面 我在用iTextSharp API来转换HTML markup to PDF 但是 不幸的是iTextSharp无法导出HTML包含 PDF 图像和表格的标记 错误 找
  • 为什么 StringValidator 对于自定义配置部分总是失败?

    我通过继承在 C 类库中创建了一个自定义配置部分ConfigurationSection 我在 Web 应用程序 也包括 C ASP NET 中引用了类库 填写了适当的属性 一切都运行良好 当我开始添加验证器时 问题就开始了 例如 这个属性
  • 如何阻止访问任何文件或exe vb.net?

    如何阻止和取消阻止文件或可执行文件在 vb net 运行时永久打开 您可以使用此代码 并且可以使用Environment UserName获取用户名 这将锁定任何类型的文件 也将锁定文件夹 Dim FSS As FileSystemSecu
  • 将 ASP.NET TextBox 呈现为 HTML5 输入类型“Number”

    当 ASP NET TextBox 呈现时 它会生成
  • 类型 '' 未映射

    我已经尝试修复这个错误有一段时间了 每当我的应用程序尝试创建数据上下文的实例时 我都会收到此错误 下面是代码 using System using System Collections Generic using System Linq u
  • 将列添加到 ASP.NET Identity 中的 AspNetUserClaims

    我在用着Microsoft AspNet Identity Core 2 2 1在我的解决方案中 我需要将其与另一个应自动添加声明的系统集成 为了跟踪哪些声明是手动添加的以及哪些是由外部系统创建的 我希望在我的AspNetUserClaim
  • 使用 href 和 php 从 sql 数据库对 html 表进行排序

    我有一个 html 表 其中包含来自 php 吐出的 sql 表的产品数据 我想通过单击表列的标题对数据进行排序 我像这样输出我的表 php product list sql mysql query SELECT FROM products
  • 在asp.net中自动调用文本框textchange事件

    我有一个表单 从其中导航到我的表单 其中有一个用于数量的文本框 之前我是输入数量的 现在 IO 有一个工作流程 这就是其他形式出现的原因 现在 我已经完成了文本框文本更改事件的大量编码 当我做response redirect在其他形式中
  • 为什么 VB.NET 和 C# 中针对值检查 null 存在差异?

    In VB NET http en wikipedia org wiki Visual Basic NET有时候是这样的 Dim x As System Nullable Of Decimal Nothing Dim y As System
  • 将图像文件从网址复制到本地文件夹?

    我有该图像的网址 例如 http testsite com web abc jpg http testsite com web abc jpg 我想将该 URL 复制到 c images 中的本地文件夹中 而且当我将该文件复制到文件夹中时
  • 无法从 Web api POST 读取正文数据

    我正在尝试从新的 Asp Net Web Api 中的请求中提取一些数据 我有一个像这样的处理程序设置 public class MyTestHandler DelegatingHandler protected override Syst
  • 我可以仅在少数情况下关闭模拟吗

    我有一个始终使用模拟的应用程序 但是 当用户以管理员身份登录时 一些操作需要他们写入服务器本身 现在 如果这些用户在实际服务器上没有权限 有些用户没有 则不会让他们写入 我想做的是关闭几个命令的模拟 有没有办法做这样的事情 using Ho
  • 无法加载文件或程序集“EntityFramework,版本=6.0.0.0”

    我究竟做错了什么 我该如何解决这个问题 我有一个包含多个项目的解决方案 它是一个 MVC NET 4 5 Web 应用程序 在调试模式下启动后调用其中一个项目时 出现此错误 导致此错误的项目具有以下参考 两个都是版本6 0 0 0 应用程序
  • dropdownlist DataTextField 由属性组成?

    有没有一种方法可以通过 C 使 asp net 中的下拉列表的 datatextfield 属性由对象的多个属性组成 public class MyObject public int Id get set public string Nam
  • 使用 keyup 事件仅触发表单验证中文本框的部分规则,并取消其余规则的事件

    我的应用程序中有一个表单 我正在使用 jQuery 表单验证插件对其进行验证 其中一项规则是远程类型 用于验证用户名是否不存在 我已经能够覆盖 onkeyup 事件 因此规则不会为我输入的每个字母发送到服务器 我完成的方式如下 var va
  • 为什么使用 HTTP 动词?

    因为动词的目标是像 server domain getallrecords 或 server domain delete1record 或类似的 URL 而getallrecords delete1record都是专门为特定目的而设计的 为
  • 按字母顺序对对象的 ArrayList 进行排序

    我必须创建一个方法来排序数组列表根据电子邮件按字母顺序排列对象 然后打印排序后的数组 我在排序时遇到麻烦的部分 我已经研究过并尝试使用Collections sort vehiclearray 但这对我不起作用 我是因为我需要一个叫做比较器

随机推荐

  • 如果发生异常,“Content-encoding”标头将从 HttpHandler 响应中消失

    我有一个自定义 HttpHandler 在其中手动启用输出压缩 如下所示 context Response AppendHeader Content encoding gzip context Response Filter new GZi
  • 返回文本之间的亲和力的函数?

    考虑我有一个 string1 hello hi goodmorning evening 我有一些小关键字 compare1 hello evening compare2 hello hi 我需要一个返回文本和关键字之间的关联性的函数 例子
  • Java 配置构建路径或 WEB-INF/lib 文件夹[重复]

    这个问题在这里已经有答案了 我见过很多教程和应用程序将其 jar 放在构建路径中 而其他教程和应用程序将其放在 web inf lib 文件夹中 有什么显着差异吗 两者有何优缺点 我将某个 jar 放入 libs 文件夹中并将该 jar 放
  • ajax请求struts 2中的操作不返回任何视图

    我有一个用于区域设置选择的下拉列表 当用户更改它时 我将 ajax 请求发送到设置会话边界的操作 现在的问题是我应该从操作的execute 方法返回什么 您可以返回 HTTP 200 OK 这应该是一个空的成功响应
  • Unity:将网格物体轻轻包裹在其他网格物体周围?

    给定一个网格 如左侧的立方体对象 和另一个自定义的球状网格 右侧 如果更容易的话 它可以是另一种形状 Unity 和 C 中的一个在运行时如何将第二个网格轻轻包裹在第一个网格周围 谢谢 下面的方法 借助 VirtualMethodStudi
  • Windows 上的 Spark-shell 错误 - 如果不使用 hadoop 可以忽略它吗?

    启动spark shell时出现以下错误 我将使用 Spark 处理 SQL Server 中的数据 我可以忽略这些错误吗 java io IOException 无法在 Hadoop 二进制文件中找到可执行文件 null bin winu
  • 为什么运行 StAX Parser 时出现 NullPointerException?

    我正在尝试用 Java 编写 StAX XML 解析器 但总是出现 NullPointerException 错误 请帮我解决这个问题 完整问题 线程 main 中的异常 java lang NullPointerException org
  • 相当于 jQuery 的 $(window).width 的原始 JavaScript 是什么?

    我听说这是偏移宽度 https stackoverflow com questions 833699 clientheight clientwidth returning different values on different brow
  • 在 Laravel 的 FormRequest 中使用复杂的条件验证规则

    我正在使用 Laravel 开发一个 Web 应用程序 我现在正在做的是创建一个 FirmRequest 来进行验证 这是我的表格请求 use Illuminate Foundation Http FormRequest class Sto
  • VS 2019 SSIS包无法添加SQL Server

    我安装了 Visual Studio 2019 和 SSIS 包扩展并创建了一个新项目 我可以毫无问题地将我的 SQL Server 添加为连接管理器 但是当我拖动Data Flow Task到包中并拖动Source Assistant对此
  • MEF 与 Mono.AddIn

    我正在开发一个 NET 3 5 C 桌面应用程序 它应该可以通过插件进行扩展 是否有任何文章等讨论 MEF 和 Mono AddIn 之间的差异来帮助我做出明智的决定 或者更好的是您有这两个框架的经验并且可以对它们发表评论吗 谢谢 帕特里克
  • geopy.exc.GeocoderInsufficientPrivileges:HTTP 错误 403:禁止

    我尝试使用 geopy 获取纬度 经度 但它会抛出 http 403 禁止错误 from geopy geocoders import Nominatim geolocator Nominatim addr 350 5th Ave New
  • 反应事件目标父节点

    是否可以获取虚拟 DOM 上事件目标的父节点 在我的基本 React 组件中 我有一个从 onClick 事件触发的方法 我想获取父虚拟 DOM 节点属性 handleClick e The following code only give
  • 用浮点数初始化 NSArray?

    这是用浮点对象初始化 NSArray 的有效方法吗 NSArray fatArray NSArray arrayWithObjects NSNumber numberWithFloat 6 9 NSNumber numberWithFloa
  • Ruby on Rails:有哪些可用的报告和/或图表工具? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我刚刚开始使用 Ruby Rails 想知道 Rails 开发人员使用什么在 Rails 站点上提供报告
  • 结束对话 C# 机器人

    我正在用 C 构建一个聊天机器人 我希望在一些消息之后对话停止 但我不知道该怎么做 我已经设置了消息限制 并且我希望在达到此限制后不能再发送消息 有我的代码 private int NombreDeMessages protected ov
  • 是否有通用 I2C 命令来查看设备是否仍然存在于总线上?

    是否有通用的 I2C 命令来查看设备在初始化一次后是否仍然存在于总线上 例如 OLED 显示器 我问这个的原因是为了避免主程序由于库代码中存在无限循环而冻结 当设备断开连接时 例如 Wire 库 在 MCU 启动时 我想检查设备是否可用 并
  • python3请求使用quote而不是quote_plus

    我使用 Python 3 和requests http docs python requests org en master 用于查询 REST 服务的模块 库 看来请求默认使用urllib parse quote plus 对于 urle
  • 在后台接收蓝牙管理器通知

    我在我的应用程序中使用BluetoothManager私有框架 我想知道当应用程序处于后台时如何接收BluetoothManager通知 例如 在后台接收连接 断开连接的蓝牙通知 提前致谢 Use global notification e
  • 在 GridView 中通过分页维护排序

    我目前正在尝试编写代码 以便在更改 GridView 上的页面时保持排序首选项 我当前的代码运行良好 可以根据用户的排序选择对数据进行排序 但是当换页时 排序不起作用 我没有收到错误 而是收到未排序的结果 这是我的 aspx 代码