C# DataTable分页处理实例代码

下面是“C# DataTable分页处理实例代码”的完整攻略:

什么是DataTable分页处理?

DataTable是.NET Framework中的一个非常重要的数据对象,它可以用来存储和操作数据。很多时候,我们需要在规模较大的数据集中只提取部分数据进行显示,这时就需要进行分页处理。

如何进行DataTable分页处理?

在C#中,可以通过以下步骤来进行DataTable的分页处理:

  1. 使用SqlDataAdapter从数据库中获取数据,将结果存储在DataTable中。
string connectionString = "Your Connection String";
string sql = "SELECT * FROM YourTable";
int start = 0; // 起始记录
int length = 10; // 每页记录数
DataTable dataTable = new DataTable();
using (SqlConnection connection = new SqlConnection(connectionString))
{
    using (SqlDataAdapter adapter = new SqlDataAdapter(sql, connection))
    {
        adapter.Fill(start, length, dataTable);
    }
}
  1. 对数据进行分页处理,仅保留需要的数据。
// 计算总页数
int totalCount = dataTable.Rows.Count;
int pageCount = (int)Math.Ceiling((double)totalCount / (double)length);

// 取出当前页的数据
DataTable pageDataTable = dataTable.Clone();
for (int i = 0; i < length && start + i < totalCount; i++)
{
    DataRow row = dataTable.Rows[start + i];
    pageDataTable.ImportRow(row);
}
  1. 将分页处理后的数据进行显示,可以使用GridView等控件进行展示。
GridView1.DataSource = pageDataTable;
GridView1.DataBind();

示例说明

接下来,我们通过两个示例分别演示如何进行DataTable的分页处理:

示例一:基本分页处理

我们假设有一个存储了100个商品信息的数据库表,包含ID、Name和Price三个字段。现在需要在一个网页中将商品显示出来,每页展示10条,并且提供基本的分页操作。

string connectionString = "Your Connection String";
string sql = "SELECT * FROM Products";
int currentPage = 1; // 当前页码
int pageSize = 10; // 每页记录数
DataTable dataTable = new DataTable();
using (SqlConnection connection = new SqlConnection(connectionString))
{
    using (SqlDataAdapter adapter = new SqlDataAdapter(sql, connection))
    {
        adapter.Fill(dataTable);
    }
}

// 计算总页数
int totalCount = dataTable.Rows.Count;
int pageCount = (int)Math.Ceiling((double)totalCount / (double)pageSize);

// 取出当前页的数据
int start = (currentPage - 1) * pageSize;
DataTable pageDataTable = dataTable.Clone();
for (int i = 0; i < pageSize && start + i < totalCount; i++)
{
    DataRow row = dataTable.Rows[start + i];
    pageDataTable.ImportRow(row);
}

// 绑定数据到GridView控件
GridView1.DataSource = pageDataTable;
GridView1.DataBind();

// 显示分页控件
for (int i = 1; i <= pageCount; i++)
{
    LinkButton button = new LinkButton();
    button.Text = i.ToString();
    button.CommandArgument = i.ToString();
    button.Command += PageButton_Click;
    Panel1.Controls.Add(button);
    Panel1.Controls.Add(new LiteralControl("&nbsp;"));
}

protected void PageButton_Click(object sender, CommandEventArgs e)
{
    int page = int.Parse(e.CommandArgument.ToString());
    // 省略获取数据和绑定数据的代码
}

以上代码演示了一个基本的分页处理,通过计算总页数、取出当前页的数据和显示分页控件,可以很简单地实现一个基本的分页功能。

示例二:支持排序和筛选的分页处理

以上示例可以满足基本的分页需求,但是有时候我们需要支持对数据进行排序和筛选,这时就需要对DataTable进行进一步的处理。

我们假设有一个用户列表,需要支持对用户名进行搜索和根据积分进行排序,并且提供分页功能。

string connectionString = "Your Connection String";
string sql = "SELECT * FROM Users";
string searchName = Request.QueryString["name"]; // 搜索用户名
string orderColumn = Request.QueryString["order"]; // 排序列
string orderDirection = Request.QueryString["dir"]; // 排序方式
int currentPage = 1; // 当前页码
int pageSize = 10; // 每页记录数
DataTable dataTable = new DataTable();
using (SqlConnection connection = new SqlConnection(connectionString))
{
    using (SqlDataAdapter adapter = new SqlDataAdapter(sql, connection))
    {
        adapter.Fill(dataTable);
    }
}

// 处理排序
if (!string.IsNullOrEmpty(orderColumn))
{
    DataView view = dataTable.DefaultView;
    string sortExpression = orderColumn + " " + orderDirection;
    view.Sort = sortExpression;
    dataTable = view.ToTable();
}

// 处理搜索
if (!string.IsNullOrEmpty(searchName))
{
    DataView view = dataTable.DefaultView;
    view.RowFilter = "UserName like '%" + searchName + "%'";
    dataTable = view.ToTable();
}

// 计算总页数
int totalCount = dataTable.Rows.Count;
int pageCount = (int)Math.Ceiling((double)totalCount / (double)pageSize);

// 取出当前页的数据
int start = (currentPage - 1) * pageSize;
DataTable pageDataTable = dataTable.Clone();
for (int i = 0; i < pageSize && start + i < totalCount; i++)
{
    DataRow row = dataTable.Rows[start + i];
    pageDataTable.ImportRow(row);
}

// 绑定数据到GridView控件
GridView1.DataSource = pageDataTable;
GridView1.DataBind();

// 显示分页控件
for (int i = 1; i <= pageCount; i++)
{
    LinkButton button = new LinkButton();
    button.Text = i.ToString();
    button.CommandArgument = i.ToString();
    button.Command += PageButton_Click;
    Panel1.Controls.Add(button);
    Panel1.Controls.Add(new LiteralControl("&nbsp;"));
}

protected void PageButton_Click(object sender, CommandEventArgs e)
{
    int page = int.Parse(e.CommandArgument.ToString());
    // 省略获取数据和绑定数据的代码
}

protected void SearchButton_Click(object sender, EventArgs e)
{
    string name = NameTextBox.Text.Trim();
    string url = "UserList.aspx?name=" + name;
    Response.Redirect(url);
}

protected void OrderButton_Click(object sender, EventArgs e)
{
    string column = OrderColumnDropDownList.SelectedValue;
    string direction = OrderDirectionDropDownList.SelectedValue;
    string url = "UserList.aspx?order=" + column + "&dir=" + direction;
    Response.Redirect(url);
}

以上代码演示了一个较为复杂的分页处理,支持对数据进行排序和筛选。通过处理排序和搜索,可以很方便地实现对数据的排序和检索。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C# DataTable分页处理实例代码 - Python技术站

(0)
上一篇 2023年5月31日
下一篇 2023年5月31日

相关文章

  • C#使用CefSharp实现内嵌网页详解

    C#使用CefSharp实现内嵌网页详解 CefSharp是一个基于Chromium的.NET开源项目,它提供了一个简单的方法来在C#应用程序中嵌入浏览器。本文将介绍如何使用CefSharp实现内嵌网页,包括以下步骤: 安装CefSharp 创建WinForms应用程序 实现内嵌网页 1. 安装CefSharp 首先,我们需要安装CefSharp。可以使用N…

    C# 2023年5月15日
    00
  • asp.net连接数据库读取数据示例分享

    下面是关于“ASP.NET连接数据库读取数据”的完整攻略,包括以下内容: 准备工作 在开始编写代码之前,需要先进行一些准备工作: 安装Visual Studio,如果没有安装的话。 安装适合的数据库驱动程序,比如SQL Server、MySQL等。 创建数据库 创建数据库的步骤可以分成以下几步: 在数据库管理工具(比如 SQL Server Manageme…

    C# 2023年6月3日
    00
  • C# Dynamic关键字之:解析dynamic就是Object

    C#中的Dynamic关键字可以用于在编译时不确定类型的情况下,让编译器推断类型并在运行时确定类型。在这种情况下,编译器将把Dynamic类型解析为Object类型。以下是关于C#中Dynamic关键字解析为Object类型的攻略: 动态类型 使用Dynamic关键字定义一个变量时,该变量将被视为动态类型,因为它可以代表任何类型。例如,在以下示例中,使用Dy…

    C# 2023年6月1日
    00
  • C# 撒列实现关键字过滤的实例

    C# 实现关键字过滤的实例 关键字过滤是一种常见的文本过滤技术,它可以用于过滤垃圾邮件、恶意评论、色情内容等不良信息。本文将介绍如何使用 C# 语言实现关键字过滤的功能。 步骤一:准备关键字列表 首先,我们需要准备一个包含关键字列表的文件,该文件中每一行包含一个关键字。例如,我们可以创建一个名为 “keywords.txt” 的文本文件,包含以下内容: 色情…

    C# 2023年6月7日
    00
  • asp.net 无刷新分页实例代码

    ASP.NET 是一款开放源码的服务器端 Web 应用程序框架,提供了丰富的功能和强大的工具,为开发者提供了高效的方式来构建、部署和维护 Web 应用程序。无刷新分页是其中一个常见需求,本文将通过两个示例来演示如何实现ASP.NET无刷新分页功能。 示例1:使用AJAX实现无刷新分页 步骤1:创建数据库表和数据 CREATE TABLE [dbo].[Use…

    C# 2023年5月31日
    00
  • c#的dataset离线数据集示例

    下面是“C#的dataset离线数据集示例”的完整攻略: 什么是 dataset? dataset是C#语言中数据存储和管理的一种对象,它可以在离线状态下对数据进行操作,而不需要一直与数据库保持连接。使用dataset可以查询、修改、删除和插入数据等操作。dataset由多个DataTable组成,每个DataTable代表一个数据表格。 创建 datase…

    C# 2023年6月2日
    00
  • C#匿名委托与Lambda表达式详解

    C#匿名委托与Lambda表达式详解 C#中的匿名委托与Lambda表达式是一种高级的函数式编程技术。它们可以让我们更加方便的处理和管理各种委托,并且更加灵活的实现各种功能。接下来将对这两种技术进行详细的讲解。 匿名委托 匿名委托是一种没有名字的委托,可以使用delegate关键字来定义。下面是一个示例: delegate(int x, int y) { r…

    C# 2023年6月7日
    00
  • C#设计模式之工厂模式

    C#设计模式之工厂模式 什么是工厂模式? 工厂模式是指为创建对象定义一个接口,让子类决定实例化哪一个类。工厂模式让一个类的实例化延迟到其子类。使用工厂模式我们可以让对象的创建和实现分离,当我们需要增加一种新的对象时,我们只需要添加一个新的具体的类和它相应的工厂类就可以了,不会对原来的代码产生太多的影响。 工厂模式的三种形式 简单工厂模式 工厂方法模式 抽象工…

    C# 2023年6月1日
    00
合作推广
合作推广
分享本页
返回顶部