C# DataTable分页处理实例代码

yizhihongxing

下面是“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# 位运算符整理

    C# 位运算符整理攻略 概述 在C#中,位运算符可以用于对二进制位进行逻辑运算。C#中的常见位运算符有: 按位与(&) 按位或(|) 按位异或(^) 取反(~) 左移(<<) 右移(>>) 按位与(&) 按位与运算符将两个数的二进制位进行比较,如果两个二进制位都为1,则该位的结果为1,否则为0。 示例代码: int a…

    C# 2023年5月31日
    00
  • C#使用FolderBrowserDialog类实现选择打开文件夹方法详解

    C#使用FolderBrowserDialog类实现选择打开文件夹方法详解 在C#开发中,文件夹是一个非常常见的操作对象,使用FolderBrowserDialog类可以实现选择打开文件夹的效果。本文将详细讲解如何使用FolderBrowserDialog类实现选择打开文件夹的方法。 使用 FolderBrowserDialog 显示窗口 FolderBro…

    C# 2023年6月1日
    00
  • 如何应用C#实现UDP的分包组包

    接下来我将详细讲解如何使用C#实现UDP的分包组包。 分包 分包可以理解为将一个大的数据包分成若干小的数据包发送,从而解决网络传输限制的问题。下面是一份分包的示例代码: // 假设message是需要分包的数据字符串 string message = "这是一个需要分包的数据包,长度超过了 MTU 大小。"; byte[] data = …

    C# 2023年6月6日
    00
  • ASP.net百度主动推送功能实现代码

    关于“ASP.net百度主动推送功能实现代码”的攻略,我可以为您提供以下内容: 什么是ASP.net百度主动推送? ASP.net百度主动推送(ASP.NET Baidu auto push)是指在网站更新后,通过代码实现将最新的页面信息主动向百度搜索引擎提交,从而使得百度更快地收录您网站的最新内容,并提供更好的搜索结果。ASP.net百度主动推送有利于SE…

    C# 2023年5月31日
    00
  • C#实现打字小游戏

    下面是讲解C#实现打字小游戏的完整攻略。 一、介绍 打字小游戏,是一种很有趣的游戏,可以提高我们的打字速度和准确率。在这个项目中,我们将使用C#语言来实现一个简单的打字小游戏。 二、准备工作 在开始编写代码之前,我们需要先准备好以下工具和环境: C#集成开发环境,如Visual Studio; .NET Framework; Windows操作系统。 三、思…

    C# 2023年6月7日
    00
  • 详解C# Protobuf如何做到0分配内存的序列化

    C# protobuf是Google开发的一种高效的序列化格式。相较于其他序列化方式(比如XML或Json),它所占用的空间更少,同时速度更快,因为它是二进制序列化格式。在进行序列化过程中,内存的分配是一个非常重要的问题,因为大量的内存分配会导致性能下降甚至内存溢出。本文将详细介绍C# protobuf如何实现0分配内存的序列化。 一、使用“MemorySt…

    C# 2023年5月31日
    00
  • C#中this指针的用法示例

    下面是关于“C#中this指针的用法示例”的详细讲解攻略。 什么是this指针 在C#中,this关键字用于引用当前对象(指向当前对象)。换言之,this指针就是指向当前类实例化的对象的指针。在类的成员方法中,我们通常将方法参数与类成员变量(字段)命名相同时,使用this关键字区分它们。 略去基础知识,我们接下来来看看this指针的用法示例。 示例一:在构造…

    C# 2023年6月7日
    00
  • C# 利用Aspose.Words.dll将 Word 转成PDF

    下面是详细的攻略: 准备工作 在官网 Aspose.Words for .NET 下载最新版的 Aspose.Words for .NET。 创建一个 C# 控制台应用程序,导入 Aspose.Words.dll。 using Aspose.Words; 代码实现 使用 Aspose.Words 加载 Word 文件。在加载过程中,Aspose.Words会…

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