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#泛型:new与where关键字全解析

    C#泛型中new和where是重要的关键字,它们都可以用于约束泛型类型参数的限制;它们都用于提高代码的安全性和可用性,它们的作用在很大程度上提高了代码的可读性和可维护性。在这篇文章中,我们将一起了解泛型中的new和where,以及它们之间的区别。 1. new关键字 在C#泛型中,new关键字被用于指定泛型类型参数必须具有公共的无参数构造函数。 使用new关…

    C# 2023年4月25日
    00
  • ASP.NET 页面之间传递参数方法汇总

    针对这个主题,“ASP.NET 页面之间传递参数方法汇总”,可以按照以下流程来进行解释: 一、前言 简单介绍一下ASP.NET网页之间传递参数的基本概念和作用,以及在实际项目开发中的重要性。 二、方法汇总 介绍常用的几种ASP.NET页面之间传递参数的方法,并根据不同的场景选择相应的传递方式。 1. QueryString 利用URL参数传递参数,适用于短时…

    C# 2023年6月3日
    00
  • Url相对路径的问题总结

    URL相对路径问题总结 在网页开发中,我们常常需要引用其他文件的资源,比如图片、CSS文件和JavaScript文件等等。而在标签属性中,我们可以写入文件的URL地址来引用这些资源。为了方便管理和维护,有时候我们会使用相对路径的方式来引用这些资源。但是相对路径也有可能出现问题,因此我们需要了解URL相对路径的问题,本文将对这个问题做出详细的解释。 问题描述 …

    C# 2023年5月31日
    00
  • asp.net 在客户端显示服务器端任务处理进度条的探讨

    一、技术原理简介 在 ASP.NET 中,我们可以使用 AJAX 技术来实现异步通信,从而达到在不刷新整个页面的情况下更新页面内容的目的。其中,可以使用 UpdatePanel 控件实现部分更新,也可以使用 jQuery 或者原生 JavaScript 的 AJAX 方法手动处理异步请求和响应。 而在处理较为耗时的服务器端任务时,我们可以使用异步处理方法,如…

    C# 2023年6月1日
    00
  • 分布式锁为什么要选择Zookeeper而不是Redis?看完这篇你就明白了

    分布式锁是在分布式系统中常用的一种性能优化方案,用于解决多节点对共享资源的同时访问问题。为了实现分布式锁,可以选择多种技术栈,常见的有Zookeeper、Redis等。而在这些技术栈中,为什么Zookeeper比Redis更适合作为分布式锁的实现呢? 1. Zookeeper的数据一致性 Zookeeper是一个开源的分布式协调服务框架,用于协调多个节点之间…

    C# 2023年5月31日
    00
  • c#的异或运算符介绍

    C#的异或运算符介绍 什么是异或运算符? 异或运算符是一种二进制运算符,用符号 ^ 表示。它的作用是将两个二进制数的每一位进行比较,如果相应位相同则结果为0,否则结果为1。 具体地,异或运算符有以下规则: a b a^b 0 0 0 0 1 1 1 0 1 1 1 0 如何在C#中使用异或运算符? 在C#中,异或运算符可以用于整型、长整型、短整型等基本数据类…

    C# 2023年6月7日
    00
  • asp.net core服务限制堆内存大小的操作方法

    以下是“ASP.NET Core服务限制堆内存大小的操作方法”的完整攻略: 什么是ASP.NET Core服务限制堆内存大小 .NET Core服务限制堆内存大小是一种机制,允许您限制ASP.NET Core应用程序使用的堆内存大小。这种机制可以帮助您优化应用程序的性能,并避免内存泄漏。 ASP.NET Core服务限制堆内存大小的操作方法 ASP.NET …

    C# 2023年5月12日
    00
  • 数据库 数据类型float到C#类型decimal, float数据类型转化无效

    问题描述: 在将数据库中的float数据类型转换成C#的decimal类型时,有些数据会发生转化无效的情况。这是由于float数据类型的精度问题所导致的。本文将详细介绍如何解决这个问题,并提供两个演示示例。 解决步骤: 1.使用double类型进行过渡转换 当我们将数据库中的float类型转化成decimal类型时,可以使用double类型作为过渡类型。这是…

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