重写gridview,支持list和dataset自动排序,带排序箭头,顺便把自动翻页也加进去了.

告别GUI点点点:Formality形式化验证的TCL脚本自动化实战(附完整脚本) 本文详细介绍了如何通过TCL脚本实现Formality形式化验证的全流程自动化,显著提升验证效率并降低错误率。内容涵盖脚本框架解析、参数化设计、验证报告生成及团队协作策略,特别适合芯片设计工程师摆脱传统GUI操作,实现300%以上的效率提升。 阅读详情

    首先说明gridview是支持自动翻页和排序的(地球人都知道...), 但打多数开发情况数据源都是我们后台来绑定的,这样就不支持自动排序和翻页了。

    搜索到很多扩展gridview自动排序的,但到实际应用时发现有很多的不足,而且大多只支持dataset,要想支持list(of T)类型的泛类型的很少,自己写了个,记录一下。

 

  1. Imports System
  2. Imports System.Collections.Generic
  3. Imports System.ComponentModel
  4. Imports System.Text
  5. Imports System.Web
  6. Imports System.Web.UI
  7. Imports System.Web.UI.WebControls
  8. Imports System.Data
  9. Imports System.Reflection
  10. Imports Logonexpress.DataService
  11. <ToolboxBitmap(GetType(GridView)), ToolboxData("<{0}:GridView runat=server></{0}:GridView>")> _
  12. Public Class GridView
  13.     Inherits WebControls.GridView
  14.     Public Delegate Sub BindHandler()
  15.     Private data As Object
  16.     Public Property DataSetSource() As Object    '定义数据源
  17.         Get
  18.             If data IsNot Nothing Then
  19.                 Return data
  20.             End If
  21.             Return Nothing
  22.         End Get
  23.         Set(ByVal value As Object)
  24.             Me.data = value
  25.         End Set
  26.     End Property
  27.     '排序字段
  28.     Protected Property SortExpressionStr() As String
  29.         Get
  30.             Return ViewState("SortExpression")
  31.         End Get
  32.         Set(ByVal value As String)
  33.             ViewState("SortExpression") = value
  34.         End Set
  35.     End Property
  36.     '获取排序表达式
  37.     Protected ReadOnly Property SortExpressionEx() As String
  38.         Get
  39.             If SortExpressionStr Is Nothing Then Return Nothing
  40.             Return Me.SortExpressionStr + " " + Me.SortDirectionStr
  41.         End Get
  42.     End Property
  43.     '获取排序方向
  44.     Protected Property SortDirectionStr() As String
  45.         Get
  46.             If ViewState("SortDirection") Is Nothing Then
  47.                 Return "DESC"
  48.             End If
  49.             If ViewState("SortDirection").ToString.ToLower = "asc" OrElse ViewState("SortDirection").ToString.ToLower = "desc" Then
  50.                 Return ViewState("SortDirection")
  51.             End If
  52.             Return "DESC"
  53.         End Get
  54.         Set(ByVal value As String)
  55.             ViewState("SortDirection") = value
  56.         End Set
  57.     End Property
  58.     '第一次翻页要还原排序方向,因为排序后我们就改变了排序方向,翻页时会重新绑定,所以要还原上一次的排序状态
  59.     Private Property IsPaging() As Boolean
  60.         Get
  61.             Return ViewState("IsPaging")
  62.         End Get
  63.         Set(ByVal value As Boolean)
  64.             ViewState("IsPaging") = value
  65.         End Set
  66.     End Property
  67.     <Category("Appearance")> _
  68.     <Editor("System.Web.UI.Design.ImageUrlEditor", GetType(System.Drawing.Design.UITypeEditor))> _
  69.     <Description("设置升序图标"), Browsable(True)> _
  70.     Public Property AscendingImageUrl() As String
  71.         Get
  72.             If ViewState("SortImageAsc") IsNot Nothing Then
  73.                 Return ViewState("SortImageAsc")
  74.             End If
  75.             Return ""
  76.         End Get
  77.         Set(ByVal value As String)
  78.             ViewState("SortImageAsc") = value
  79.         End Set
  80.     End Property
  81.     <Category("Appearance")> _
  82.     <Editor("System.Web.UI.Design.ImageUrlEditor", GetType(System.Drawing.Design.UITypeEditor))> _
  83.     <Description("设置降序图标"), Browsable(True)> _
  84.      Public Property DescendingImageUrl() As String
  85.         Get
  86.             If ViewState("SortImageDesc") IsNot Nothing Then
  87.                 Return ViewState("SortImageDesc")
  88.             End If
  89.             Return ""
  90.         End Get
  91.         Set(ByVal value As String)
  92.             ViewState("SortImageDesc") = value
  93.         End Set
  94.     End Property
  95.     '重写OnRowCreateed来设置排序图标
  96.     Protected Overrides Sub OnRowCreated(ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs)
  97.         If e.Row.RowType = DataControlRowType.Header Then
  98.             If Me.SortExpressionEx <> "" OrElse Me.SortExpressionEx <> String.Empty Then
  99.                 ShowSortImage(e.Row)
  100.             End If
  101.         End If
  102.     End Sub
  103.     Private Sub ShowSortImage(ByVal row As GridViewRow)
  104.         For Each tc As TableCell In row.Cells
  105.             If tc.Controls.Count > 0 And TypeOf tc.Controls(0) Is LinkButton Then
  106.                 Dim st As String = DirectCast(tc.Controls(0), LinkButton).CommandArgument
  107.                 If st = Me.SortExpressionStr Then
  108.                     Dim img As New System.Web.UI.WebControls.Image
  109.                     img.ImageUrl = IIf(Me.SortDirectionStr = "ASC", Me.AscendingImageUrl, Me.DescendingImageUrl)
  110.                     tc.Controls.Add(img)
  111.                     Exit Sub
  112.                 End If
  113.             End If
  114.         Next
  115.     End Sub
  116.     '重写排序方法
  117.     Protected Overrides Sub OnSorting(ByVal e As System.Web.UI.WebControls.GridViewSortEventArgs)
  118.         Me.SortExpressionStr = e.SortExpression
  119.         IsPaging = True
  120.         RaiseEvent GetBindData()
  121.         If Me.SortDirectionStr.ToLower = "asc" Then
  122.             Me.SortDirectionStr = "DESC"
  123.         Else
  124.             Me.SortDirectionStr = "ASC"
  125.         End If
  126.     End Sub
  127.     '顺便重写一下翻页方法,之后只要在代码中允许翻页就可以了
  128.     Protected Overrides Sub OnPageIndexChanging(ByVal e As System.Web.UI.WebControls.GridViewPageEventArgs)
  129.         If Me.IsPaging Then
  130.             SortDirectionStr = IIf(SortDirectionStr = "ASC", "DESC", "ASC")
  131.             IsPaging = False
  132.         End If
  133.         Me.PageIndex = e.NewPageIndex
  134.         RaiseEvent GetBindData()
  135.     End Sub
  136.     '获得数据源
  137.     Public Event GetBindData()
  138.     '重点:如果是List(of T)类型的数据源,就要把T类型传过来,在排序接口中使用
  139.     Public Sub OnBind(Of T)(Optional ByVal pageIndex As Integer = 0)
  140.         If Me.data IsNot Nothing Then
  141.             If SortExpressionStr = Nothing Then
  142.                 Me.DataSource = data
  143.                 Me.DataBind()
  144.                 Exit Sub
  145.             End If
  146.             Select Case data.GetType.ToString
  147.                 Case GetType(DataSet).ToString
  148.                     Dim dv As DataView = DirectCast(data, DataSet).Tables(0).DefaultView
  149.                     dv.Sort = Me.SortExpressionEx
  150.                 Case GetType(DataTable).ToString
  151.                     Dim dv As DataView = DirectCast(data, DataTable).DefaultView
  152.                     dv.Sort = Me.SortExpressionEx
  153.                 Case Else
  154.                     Dim perwr As New PredicateWrapper()
  155.                     perwr.PropertyName = Me.SortExpressionStr
  156.                     perwr.IsAsc = Me.SortDirectionStr.ToUpper = "ASC"
  157.                     DirectCast(data, List(Of T)).Sort(AddressOf perwr.Comparsion(Of T))
  158.             End Select
  159.             Me.DataSource = data
  160.             Me.PageIndex = pageIndex
  161.             Me.DataBind()
  162.         End If
  163.     End Sub
  164. End Class

List排序类

  1. Imports Logonexpress.DataService
  2. Public Class PredicateWrapper
  3.     Public PropertyName As String
  4.     Public IsAsc As Boolean
  5.     Public Sub New()
  6.     End Sub
  7.     Public Sub New(ByVal propertyname As String, ByVal isAsc As Boolean)
  8.         propertyname = propertyname
  9.         isAsc = isAsc
  10.     End Sub
  11.     Public Function Comparsion(Of T)(ByVal x As T, ByVal y As T) As Integer
  12.         If x Is Nothing AndAlso y Is Nothing Then
  13.             Return 0
  14.         ElseIf x Is Nothing Then
  15.             Return -1
  16.         ElseIf y Is Nothing Then
  17.             Return 1
  18.         End If
  19.         Dim getter As MemberGetDelegate = MemberAccessor.Instance.GetterDelegate(GetType(T), PropertyName)
  20.         Dim vx As Object = getter(x)
  21.         Dim vy As Object = getter(y)
  22.         Dim result1 As Integer = comparer.Default.Compare(vx, vy)
  23.         If result1 <> 0 Then
  24.             If Not IsAsc Then
  25.                 Return Not result1
  26.             Else
  27.                 Return result1
  28.             End If
  29.         End If
  30.         Return 0
  31.     End Function
  32. End Class

 说明: 部分命名空间和类是引用公司的.

 

之后只要在代码中添加:Gridview就已经支持List和Dataset数据源的排序和分页了。

  1.     Protected Sub GridView1_GetBindData() Handles GridView1.GetBindData
  2.         Me.GridView1.DataSetSource = GetDb.GetDb
  3.         Me.GridView1.OnBind(Of DataTable)()
  4.     End Sub
Python控制程控电源(USB) 随着智能电动汽车行业的持续发展,汽车电子或嵌入式设备在软硬件的测试中,都会使用程控电源供电,特别是自动化测试、压力测试场景必定使用到程控电源控制,控制电源上下电,监听电源电流、电压等,以下就以常见的艾德克斯程控电源为例,分享如何通过USB连接方式Python语言来控制程控电源。 阅读详情

相关推荐

OpenCompass实战:从零部署大模型评测平台,量化模型能力选型

在大模型技术选型与评估中,客观、可量化的评测体系是工程实践的关键。其核心原理在于通过标准化的数据集、统一的评测方法与自动化流程,将主观的模型体验转化为可比较的指标数据。这种评测框架的技术价值在于解决了模型能力评估的模糊性问题,为开发者提供了模型选型、效果对比与迭代优化的科学依据。典型的应用场景包括对比不同开源模型在代码生成、逻辑推理等特定任务上的性能,或是评估微调后模型在业务数据集上的提升效果。OpenCompass作为开源的大模型全能力评测平台,正是这一理念的工程化实现。它通过模块化的四层流水线架构和配置

weixin_28725037的博客 626

ASP.NET中GridView控件删除数据的两种方法

今天在用GridView控件时,发现了一个问题,就是使用GridView控件在删除数据时的问题。接下来我们通过模板列方式和CommandField方式删除某条数据讲解下两者之间的区别。    方式一:通过模板列式删除数据       案例:在页面中添加一个GridView控件,然后通过编辑列的方式为GridView添加对应的列。如下图:红色圈起的部分为模板列的删除列    然后在编辑模板中

风雨无阻,执着追求!!! 1万+

用Omniverse Kit开发第一个USD插件:从环境配置到实战案例(Python 3.7版)

本文详细介绍了如何使用NVIDIA Omniverse Kit和Python 3.7开发第一个USD插件,涵盖从环境配置到实战案例的全过程。通过创建可实时同步材质属性的USD插件,开发者可以快速掌握Omniverse开发框架,提升3D内容创作效率。

x8y9z0的博客 585

重写GridView支持数据筛选和自动排序功能

控件使用方法: 1.在页面Page_Load()方法的!Page.IsPostBack外面重新绑定数据源,即为DataSource赋值,因为页面回传时!Page.IsPostBack内的方法不会执行,先前赋值的DataSource为null。 2.将AllowSelecting属性设置为true 3.将AllowSorting属性设置为true,并为SortExpression赋值 筛选数...

weixin_30809173的博客 266

Win11下CH340串口识别失败的终极排查指南:从驱动更新到硬件电路检查

本文提供了Windows 11系统下CH340串口芯片识别失败的全面排查指南。从驱动更新、系统设置等软件层面入手,逐步深入到USB线缆、电源测量等硬件连接检查,并重点剖析了硬件设计细节,如电源退耦电容容值对设备描述符请求的关键影响,最终帮助开发者系统性地定位并解决识别难题。

weixin_29174013的博客 588

移动端抓包实战指南:从HTTPS解密到QUIC协议与证书绑定破解

HTTPS作为保障网络通信安全的核心协议,其工作原理基于TLS/SSL加密与证书信任链验证。在移动应用开发与测试中,抓包是调试接口、分析性能、排查问题的关键技术手段。然而,随着移动端安全性的提升,传统的代理抓包方法常因证书绑定、HTTP/3/QUIC协议等挑战而失效。这要求开发者掌握分层诊断思维,协同使用代理工具、协议分析工具及底层流量捕获工具。例如,面对证书绑定导致的流量不可见,需借助Wireshark进行协议层分析;针对基于UDP的QUIC协议,则需使用支持该协议的抓包工具或临时禁用特性。本文聚焦移动端

weixin_27722377的博客 296

gridview 绑定list<实体类>

gridview 绑定list是可以的,示例如一下。         public class Employee     {         public int Id { get; set; }         public string Name { get; set; }                 public Employee(int id, s

5225

Apple 网页 SRP 登录系列文章(二):网页参数提取与会话初始化

本文深入解析了Apple网页SRP登录的第一个关键环节。文章首先指出Apple登录页面采用多层安全架构,包括跨域跳转机制和动态参数生成。重点介绍了四种关键参数(ServiceKey、SCNT、FrameId、ServiceNum)的提取技术,通过正则表达式和JSON路径解析从HTML脚本和HTTP头中获取。最后详细说明了会话初始化流程,包括访问初始页面和构建认证URL。这些技术细节揭示了Apple如何通过复杂机制确保登录过程的安全性。

Sayid_Des的专栏 1129

Gridview 绑定泛型List<T> 排序方法

protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)     {         string sortExpression = e.SortExpression.ToString();         string sortDirection = "ASC";         if (sortEx

anihasiyou的专栏 1172

STM32H743的ADC还能这么玩?定时器触发+DMA搬运,构建低CPU占用的数据流

本文深入探讨了STM32H743微控制器中ADC的高效使用方法,通过定时器触发和DMA搬运技术实现低CPU占用的数据流采集。详细解析了硬件架构、CubeMX配置步骤及高级优化技巧,包括双缓冲技术和多ADC同步采样,适用于电机控制、音频采集等高性能应用场景。

weixin_30698527的博客 647

快速卷积结构FIR数字滤波器的设计与ARM平台实现

本文提出了一种基于快速卷积结构的FIR数字滤波器设计与实现方案。通过Matlab设计了满足特定指标的低通FIR滤波器,采用重叠-保存法和重叠-相加法两种快速卷积算法,将计算复杂度从O(N·M)降低到O(NlogN)。详细介绍了滤波器系数生成、性能验证流程,并提供了ARM平台C语言实现的关键技术,包括定点量化处理。实验结果表明,该方法能有效滤除混合信号中的高频干扰,保留目标1kHz正弦信号,验证了设计方案的有效性。

huanghm88的专栏 123

asp.net中的数据绑定详解

本文来自网络,来源也是转载,谁有源地址,我加链接进来 灵活的运用数据绑定操作 绑定到简单属性: 绑定到集合:' runat="server"> 绑定到表达式: 绑定到方法返回值: 绑定到Hashtable: 绑定到ArrayList: 若数组里里放的是对象则可能要进行必要的转换后再绑定如: 绑定到DataView,DataTable,DataSet: 或 要格式化则:

darkread的专栏 1107

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

GridView1 修改,删除 操作

后台代码 using System;using System.Collections;using System.Configuration;using System.Data;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.HtmlControls;using System.W

wklilong的专栏 1260

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

ASP.NET—001:GridView绑定List、页面返回值

用惯了WPF的绑定,ASP.NET的绑定貌似不是很好用。下面看看ASP.NET绑定的用法。一般来说可以直接绑定DataTable的,不过我觉得绑定List比较符合面向对象编程。绑定的方法是两句代码:GridView名.DataSource = List; GridView名.DataBind();直接看例子吧,以下是一个绑定一个PersonModel类的例子。其中用到了页面返回参数,使用js传递

杨友山 5555

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

.NET进期综合---缓存/关于跨页面值传递/页面设置CSS/用户自定义控件/fileupload的路径问题/dropdown二级联动的数据库设计

  1:缓存: 把经常需要访问的页面缓存为个 OutPutCache指令:  各参数解释:* Duration–页或用户控件进行缓存的时间(以秒计)。在页或用户控件上设置该属性为来自对象的HTTP 响应建立了一个过期策略,并将自动缓存页或用户控件输出。注意该属性是必需的。如果未包含该属性,将出现分析器错误。* Location–OutputCacheLocation枚举值之一。默认值为Any。警告

Ming.Blog. 1691

GridView一点技巧

1,给GridView加上鼠标移动改变背景色效果:   增加GridView的RowCreated(很明显是当GridView行创建)事件代码这里this.style.backgroundColor=#C0C0FF 的值可以是这样的十六进制也可以直接是颜色名称如=red protected void GridView1_RowCreated(object sender,

Ming.Blog. 1452

主题/Master page/动态更改页面主题

1: Skin     在工程里新建"主题"文件夹,里面就可以添加主题,注意这里的名字就是我们要引用的主题名了,也就是Theme属性值. 在某个Skin里可以添加*.Skin文件或*.css文件,在引用的时候这两个文件都会起作用.                                               下面是DEMO    这只是一个日历控件的样式,可以直接在前台代码的ht

Ming.Blog. 1277

AJAX ControlToolkit 系列之---CollapsiblePanelExtender

CollapsiblePanelExtender : 可层叠面版控件.   之前看THC的教程时,发现他用网页做的"课堂教案"中有点特别的,就是点其中一 标题就可以隐藏或显示下一个层...觉得还蛮不错的,今天看了看AJAX ControlToolkit 的介绍发现用Collapsibl

Ming.Blog. 1238

.net页面间的参数传递多种方法

方法1·用QueryString使用QuerySting在页面间传递值已经是一种很老的机制了,这种方法的主要优点是实现起来非常简单,然而它的缺点是传递的值是会显示在浏览器的地址栏上的(不安全),同时又不能传递对象,但是在传递的值少而安全性要求不高的情况下,这个方法还是一个不错的方案。使用这种方法的步骤如下:1,使用控件创建Web表单(form)2,创建可以返回表单的按钮和链接按钮3,在按钮或链接按

Ming.Blog. 1182

写上我的第一篇-----WebPart

  写上我的第一篇:  Web Parts是.NET2.0的新技术,简单的说它是支持客户端网页编辑,拖拽动作....感觉蛮酷的哦,就象Q_ZONE和google自定义页面的操作一样...这是我的操作截图:     学ASP.NET有一,两个月了,昨天才开始看关于Web Part这部分的内容.入门是看的MSDN上的教程,看了半天才开始动手做...一做才发现怎么都不对,放上webpartman

Ming.Blog. 1105

FreeTextBox控件的使用

在做一个Blog系统,用到FreeTextBox控件,在这里搜集一下网上的说明和使用:对于FreeTextBox(版本3.1.6)在ASP.Net 2.0中使用, 放上下载地址:  下载最新版FreeTextBox(版本3.1.6),解压   FreeTextBox 3.1.6 (2006/07/18)    博客园本地下载: http://www.cnblogs.com/Files/

Ming.Blog. 1094

ASP.NET 2.0中Mebership的扩展使用

    这两天一直在看membership,之前对它只是泛泛了解一点,只是使用登陆控件能登陆而已....而且是使用的SQL2000因为.NET2.0默认的是使用SQL 2005 Express(地球人都知道!!)所以之前也花了不少时间去看教程....哎~这就是自学的悲哀啊....也许只要老师的1分钟......   好了,说正题:Membership!扩展分三个方面:1.对  Member

Ming.Blog. 1089

asp.net页面静态化方法集合!!

  为了支持搜索引擎,优化网站不得不把动网静态化...  最近看了些这方面资料:  大致分为三个方面:1.伪装静态:也就是用URL重写、urlwrite...其实只是可以用静态地址访问动态地址并传参数,例如:http://www.dearming.cn/23.html.其实访问的是http://www.dearming.cn/article.aspx?aid=23. 这种方法并没有实质的静态化页面

Ming.Blog. 1016

aps.net中在后台调用已有的javascript函数

     script type="text/javascript">        function CheckValue()            {            var obj = $get(%=txtPerMonth.ClientId %>);            if (obj!= null)                {       

Ming.Blog. 960

XML和DataSet转换

用.NET可以方便的操作XML,当做数据源*当XML转到DataSet的时候会遵循如下几个原则*具有属性的元素和具有自节点的元素会变成表*重复的元素会变成列这里使用GridView绑定  XML: xml version="1.0" standalone="yes"?>family>  p relation="myfather">    name>安name>    sex>manse

Ming.Blog. 945

TreeView

更多精彩尽在:www.dearming.cnTreeView Web 控件:     1; 在网页中以树结构显示分层数据(如目录)。TreeView 控件由 TreeNode 对象组成。      2: 数据源可以是XML、站点地图、和SQL数据库(需要编程做)          XML数据源:可以看到其标签名是可以自己定义的.....每个标签代表一个结点xml version

Ming.Blog. 869
上一篇: IComparer(Of T) 接口的实现 (vb.net)
下一篇: aps.net中在后台调用已有的javascript函数
mingzhecode
博客等级 码龄19年 13粉丝 42原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值