DataView 提供了几项用于对 DataTable 中的数据进行排序和筛选的功能:
- 使用 Sort 属性,可以指定单个或多个列排序顺序并包含 ASC(升序)和 DESC(降序)参数。
- 可以使用 ApplyDefaultSort 属性自动以升序创建基于表的一个或多个主键列的排序顺序。只有当 Sort 属性为空引用或空字符串时以及表已定义主键时,ApplyDefaultSort 才适用。
- 使用 RowFilter 属性,可以根据行的列值来指定行的子集。有关 RowFilter 属性的有效表达式的更多信息,请参见有关 DataColumn 类的 <link keywords="frlrfSystemDataDataColumnClassExpressionTopic"> 属性的参考信息。
- 使用 RowStateFilter 属性,可以指定要查看的行版本。DataView 根据基础行的 RowState 来隐式地管理要公开哪些行版本。
所以利用 DataView 的特点,我们可以实现 DataGrid 对列的排序。我实现这样一个DataGrid可以点击各个列头,对不同列进行排序。其原理是: 在客户端触发事件提交到服务端,服务端根据不同的列名对同一个DataTable进行操作生成不同的DataView绑定到 DataGrid, 实现排序的效果。

因为表头是我自定义的div, 所以我需要一个隐藏域来区别客户端提交过来的事件。另外我需要一个隐藏域来获得客户端点击的是哪一列。(保存点击的列名)
在aspx页里有如下两个隐藏域:
<input id="command" type="hidden" name="command" runat="server">
<input id="sortCol" type="hidden" name="sortCol" runat="server">
表头设计如下:
<table id="caption" cellSpacing="0" cellPadding="0" width="604" border="1"><tr style="BACKGROUND-COLOR: buttonface">
<td id="tdName" style="CURSOR: hand" onclick="ClickTitle(this)" width="30%" runat="server">Name</td>
<td id="tdTitle" style="CURSOR: hand" onclick="ClickTitle(this)" width="30%" runat="server">Title</td>
<td id="tdTelephone" style="CURSOR: hand" onclick="ClickTitle(this)" width="30%" runat="server">Telepone</td>
</tr></table>
点击表头中各个列头的时候,将触发客户端onclick事件执行客户端脚本ClickTitle()
function ClickTitle(item)
{
item.setAttribute("bgcolor", "#999999", 0);
document.getElementById("command").value = "sort";
document.getElementById("sortCol").value = item.innerText;
document.forms[0].submit();
}
这个方法,将隐藏域command赋值为sort, 同时将被点击的列名保存在隐藏域sortCol中,提交到服务端。
服务端在Page_Load()的方法中处理来自客户端的不同请求。
(为了方便操作,代码里把数据源DataTable,DataView定义为类成员变量)
private void Page_Load(object sender, System.EventArgs e)
{
if(!this.IsPostBack)
{
BindData();
}
if(this.command.Value == "sort")
{
BindData();
// sortedDataView是对DataTable重新排序后的DataView
DataView sortedDataView = new DataView(dt, "", this.sortCol.Value.TrimEnd('5'), DataViewRowState.CurrentRows);
switch(this.sortCol.Value)
{
case "Name":
this.tdName.InnerHtml = "Name<span style='FONT-FAMILY: Marlett;'>5</span>";
this.tdTitle.InnerHtml = "Title";
this.tdTelephone.InnerHtml = "Telephone";
break;
case "Title":
this.tdTitle.InnerHtml = "Title<span style='FONT-FAMILY: Marlett'>5</span>";
this.tdName.InnerHtml = "Name";
this.tdTelephone.InnerHtml = "Telephone";
break;
case "Telephone":
this.tdTelephone.InnerHtml = "Telephone<span style='FONT-FAMILY: Marlett'>5</span>";
this.tdTitle.InnerHtml = "Title";
this.tdName.InnerHtml = "Name";
break;
default:
break;
}
this._MyDataView = sortedDataView;
this.DataGrid1.DataSource = sortedDataView;
this.DataGrid1.DataBind();
this.command.Value = "";
this.sortCol.Value = "";
}
}
每次在排序的时候,数据都需要重新绑定,即调用BindData()方法。
private void BindData()
{
string strConn = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=";
string strDataSource = Server.MapPath(@"../DB/data.mdb");
strConn = strConn + strDataSource;
OleDbConnection objConn = null;
OleDbDataAdapter objDataAdapter = null;
string strSql = "select Name, Title, Telephone from data";
try
{
objConn = new OleDbConnection(strConn);
objDataAdapter = new OleDbDataAdapter(strSql, objConn);
dt = new DataTable();
objDataAdapter.Fill(dt);
this._MyDataView = dt.DefaultView;
this.DataGrid1.DataSource = this._MyDataView;
this.DataGrid1.DataBind();
}
catch(Exception ex)
{
this.Response.Write(ex.Message);
}
}
注: <span style='FONT-FAMILY: Marlett'>5</span> 是显示在列头里朝上箭头的。所以在调用DataView的构造方法的时候需要去掉多余的这个字符。<!--EndFragment--><!--EndFragment--><!--EndFragment-->
分享到:
相关推荐
这个“自制 iPhone DataGrid 数据列表组件”是一个专门为iOS应用设计的自定义控件,它允许开发者创建类似电子表格的布局,支持行列锁定功能,极大地增强了数据展示的灵活性和用户体验。 在iOS开发中,标准的...
本文将深入分析一个针对Flex DataGrid中文字符排序的类——`SortUtil`,并探讨其背后的原理与实现细节。 #### 类概述 `SortUtil`类旨在为Flex DataGrid提供一种有效的中文字符排序机制。该类包含几个关键常量和...
Datagrid允许开发者以表格的形式展示数据,支持排序、分页、列选择、行编辑等功能。它可以从各种数据源获取数据,如ArrayCollection、XMLListCollection或直接绑定到数据服务。 在“Flex实践——Datagrid的打印预览...
在.NET框架中,WPF(Windows Presentation Foundation)提供了一个强大的数据呈现控件——DataGrid,它用于显示和编辑网格形式的数据。在实际开发中,我们经常需要根据需求对DataGrid的列标题进行自定义,以增强界面...
在给定的压缩包“ASP.NET源码——适合初学者的datagrid的操作.zip”中,重点是关于ASP.NET中的DataGrid控件的使用,这是一个非常重要的数据展示和操作组件,尤其适合初学者学习。 DataGrid控件是ASP.NET Web Forms...
本文将详细探讨如何在.NET框架下的WinForms应用程序中实现一个特殊的排序功能——即合计行不参与排序。 #### 实现原理与步骤 为了实现在排序过程中排除合计行的影响,我们需要进行以下几个关键步骤: 1. **识别...
### DATAGRID使用指导——深度解析与应用技巧 #### 一、DATAGRID概述与基本概念 DataGrid是ASP.NET中一个非常强大的控件,用于展示和操作数据集中的数据。它提供了丰富的功能,如排序、分页、编辑、删除等,非常...
给出的示例代码展示了如何创建一个新的 `DataGridTableStyle` 对象,并设置其相关的属性,包括列标题(`HeaderText`)、列名映射(`MappingName`)以及列宽(`Width`)等,最后将这些配置应用到 `DataGrid` 控件上。...
在Flex开发中,DataGrid是一种非常常见的组件,它用于展示数据集合,并且可以通过配置使其支持各种交互行为,比如排序、筛选以及本篇重点——拖拽功能。本文将深入探讨如何在两个DataGrid之间实现数据的拖拽功能。 ...
2. easyui-datagrid在前端的应用 easyui-datagrid是基于jQuery EasyUI框架的一个组件,它可以用来在前端页面上展示表格形式的数据。其特点包括支持分页、排序、远程数据加载等功能。文件描述中提到的easyui-datagrid...
在本项目中,我们主要探讨如何使用Struts2框架与EasyUI库,通过Maven进行构建和依赖管理,实现一个单元格可编辑的表格——DataGrid。以下将详细阐述涉及的技术点及其应用。 首先,Maven是Apache软件基金会开发的一...
5. **Ajax**:Asynchronous JavaScript and XML(异步JavaScript和XML),虽然现在XML不常用,但Ajax的核心思想——异步更新页面,仍然广泛应用于现代Web应用。在本项目中,Ajax使得用户在不刷新整个页面的情况下,...
【描述】:这个描述暗示了我们在开发过程中可能遇到的问题——如何在网页上以分页的形式展示大量数据,并允许用户通过点击表头进行数据排序,同时提供查询功能以便快速定位所需信息。在DWZ.NET中,这些功能可以通过...
在描述中提到的“flex datagrid pagination”是指DataGrid控件的一个重要特性——分页功能。在处理大数据集时,分页是必不可少的,因为它能提高用户体验,避免一次性加载所有数据导致的性能问题。下面将详细讲解Flex...
在本文中,我们将深入探讨两种在Flex或Adobe AIR应用程序中常用的组件——`DataGrid`和`AdvancedDataGrid`,特别是关于它们的CheckBox全选功能。`DataGrid`和`AdvancedDataGrid`是Flex中用于展示数据集合的强大工具...
"datagrid-cellediting.zip"这个压缩包显然是针对EasyUI的datagrid组件的一个特定功能——单元格编辑的实现。 `datagrid`是EasyUI中的核心组件之一,它是一种数据表格控件,能够展示大量结构化数据,并提供了排序、...
在本文中,我们将深入探讨如何使用Vue.js框架创建一个复杂的、具有交互性的表格——vue-data-grid。Vue.js是一个流行的轻量级JavaScript库,它提供了一种声明式、组件化的方式来构建用户界面。Vue-data-grid是基于...
在.NET框架中,WPF(Windows Presentation Foundation)提供了一个强大的数据呈现控件——DataGrid,它用于显示和操作大量结构化的数据。这个“DataGrid数据刷新及选择.rar”压缩包包含了一个WPF应用实例,专注于...
Datagrid 是一个用于展示表格数据的组件,具有排序、筛选、分页等功能,广泛应用于数据密集型的应用场景。 首先,我们要理解 Datagrid 的基本结构和配置。Datagrid 通常由 HTML 标签 `<table>` 创建,并通过设置 `...