`

控件排序事件中用DataView及DataTable排序

阅读更多

在做ASP.NET页面开发时,经常要用到dataset(或者DataTable),绑定到DataGrid或GridView上要进行重新排序,排序规则按照数组fids元素的顺序进行。本文将介绍如何在排序事件用DataView及DataTable实现排序功能.

一般人的做法是用DataView排序,关键代码如下

DataView dv = dt.DefaultView; dv.Sort = "dis,发布日期 desc";


 

然后把dv绑定到DataGird输出。

不过问题又来了,如果我们需要分页功能,在翻页时,我们需要ViewState等控件来保存状态啊.那么我们还是需要用到DataTable或DataSet, DataView本身不能被序列化,DataView中的Table属性是未经排序的,所以它在这里不起作用.

于是有个菜鸟级土解决方法如下(只使用了简单的循环):

private DataTable SortTable(DataTable dt,string[] pids) { DataTable dt0 = dt.Clone(); //复制原表结构 for(int i=0;i<pids.Length;i++) { if(pids[i] != string.Empty) { DataRow[] drs = dt.Select("pos_id=" + pids[i]); if(drs.Length > 0) { foreach(DataRow dr in drs) { dt0.ImportRow(dr); //导入行 } } } } return dt0; }


说明:就是对排序的数组循环,在datatable中找对应的行,然后复制到新表中。

该方法的效率还是可以的,不过如果交集次数大于20,000,000的时候,就会有效率问题.

其实啊,新近版的.NET类库里的DataRow[]集合对象中已经有个CopyToDataTable方法可以解决DataTable排序问题,在控件的排序事件中实现如下代码:


string currentSortColumn = this.SortColumn;//封闭ViewState变量的属性
this.SortColumn = e.SortExpression;

if (currentSortColumn == this.SortColumn)
    this.SortAscending = !this.SortAscending;//封闭ViewState变量的属性
else
    this.SortAscending = false;

DataTable dt = (DataTable)ViewState["DataSource"];
DataRow[] filter = dt.Select("",this.SortColumn + " " + (this.SortAscending? "ASC" : "DESC"));
DataTable newTable = filter.CopyToDataTable();
ViewState["DataSource"] = newTable;
this.BindDateGrid();

  

但我们却不知道CopyToDataTable的效率是否足够好.

 

 

分享到:
评论

相关推荐

    DataTable,DataView和DataGrid用法教程:DataTable,DataView和DataGrid中一些容易混淆的概念,详细讲解了它的区别和用法。

    `DataGrid`是.NET Framework中用于数据展示的控件,它可以绑定到各种数据源,包括DataTable和DataView。DataGrid提供了一个用户界面,让用户能够查看和编辑数据。它支持行选择、排序和编辑功能,并且可以自定义列的...

    dataView详解

    总的来说,DataView是.NET中用于数据操作的强大工具,它提供了排序、筛选、编辑和数据绑定等功能,使得在应用程序中处理和展示数据变得更加方便。理解并熟练运用DataView,可以帮助开发者更有效地管理和展示...

    C#链接数据库控件说明

    本说明将聚焦于C#中用于数据库操作的一些控件和概念,特别是DataTable、DataView和DataGrid。这些组件是.NET Framework中的数据绑定控件,它们在数据展示和管理中起着重要作用。 首先,我们要理解DataTable。...

    asp.net gridview 上传和下载

    在描述中提到的datalist和dataliview也是ASP.NET中用于数据展示的控件,虽然它们不像GridView那么常见,但也有其独特的用处。DataList更灵活,可以用于创建自定义布局,而DataView则是DataTable的一个视图,常用于...

    .net笔试题及答案

    了解DataSet、DataTable、DataView、DataAdapter、Command对象的使用方法,以及如何进行事务处理和参数化查询。 5. **WCF(Windows Communication Foundation)**:是.NET的面向服务架构,用于构建分布式应用程序。...

    .net2.0数据库简单封装

    在.NET 2.0中,微软提供了一套强大的数据访问技术,包括ADO.NET、DataSet、DataView、DataTable等组件,这些组件可以帮助开发者更高效地与各种数据库进行交互。 1. ADO.NET概述: ADO.NET是.NET Framework中的核心...

    C#编程经验技巧宝典

    43 &lt;br&gt;0061 树的实现 44 &lt;br&gt;3.2 排序 48 &lt;br&gt;0062 如何实现选择排序算法 48 &lt;br&gt;0063 如何实现冒泡排序算法 49 &lt;br&gt;0064 如何实现快速排序算法 50 &lt;br&gt;0065 如何实现插入排序算法 ...

    asp.net interview.txt

    它可以绑定多种类型的数据源,包括`DataSet`、`DataTable`、`DataView`和`IList`等。 #### 9. MVC模式 MVC(Model-View-Controller)模式是一种软件架构设计模式,用于分离应用的业务逻辑、用户界面和控制流程。在...

    Visual C# 2005数据库通用模块开发与系统移植之2

    1. ADO.NET基础:ADO.NET是.NET Framework中用于数据库访问的核心组件,它包括DataSet、DataTable、DataAdapter、DataView和DataReader等对象。在Visual C# 2005中,开发者可以利用这些对象进行数据操作,如查询、...

    DataBinder.Eval总结

    `DataBinder.Eval` 是ASP.NET中用于数据绑定的一个非常重要的方法,主要在网页模板控件(如Repeater, GridView等)中使用,用于从数据源中获取并显示数据。以下是对`DataBinder.Eval`的详细总结: 一、基本使用格式...

    ASP ADO .NET

    4. **DataView**:提供了一种灵活的方式来浏览和操作 `DataTable` 中的数据,支持排序、筛选和分组等功能。 5. **XmlReader**:用于从 XML 数据流中读取数据,与 `SqlDataReader` 类似,主要用于处理 XML 格式的...

    C的一点点源码 对初学的人来说还能算得上是经典

    4. **09_SimpleDataBinding**: 简单数据绑定可能是指在C#中如何将控件与数据源进行基本连接,使得数据变化时控件自动更新。 5. **02_DataSourceArray**: 使用数组作为数据源,是C/C++的基础,这里可能讲解了如何用...

Global site tag (gtag.js) - Google Analytics