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#防止多次运行代码收集分享

    下面是“c#防止多次运行代码收集分享”的完整攻略。 为什么需要防止多次运行代码收集分享? 在一些情况下,我们可能需要避免多次运行同一段代码,例如: 程序中涉及到计费、统计等需要唯一记录的操作。 程序中涉及到文件、资源等需要避免重复操作的情况。 这时就需要在代码中增加防止多次运行的机制。 如何防止多次运行代码收集分享? 方法一:使用静态标志位 使用静态标志位的…

    C# 2023年6月7日
    00
  • unity里获取text中文字宽度并截断省略的操作

    获取Unity中Text组件中文字宽度并截断省略的操作可以使用Unity自带的TextGenerator类来实现。下面是详细攻略: 步骤1:获取Text组件中的文本字符串 首先,我们需要获取到Text组件中的文本字符串,可以通过Text组件的text属性来获取。例如,如果要获取名为“textObject”的Text组件中的文本字符串,可以使用以下代码: st…

    C# 2023年6月3日
    00
  • C# Stream.Write – 向流中写入数据

    C#的Stream.Write方法是用于向流中写入数据的方法,其作用是将字节数组中的内容写入到流中。该方法可以用于写入任何类型的数据,包括文本、图像、声音等。 以下是该方法的使用方法的完整攻略: 打开流对象:在使用该方法之前,需要打开流对象。打开流对象可以使用FileStream类、MemoryStream类、NetworkStream类等。根据需要选择相应…

    C# 2023年4月19日
    00
  • C#中参数数组、引用参数和输出参数示例详解

    C#中参数数组、引用参数和输出参数示例详解 在C#中,函数的参数既可以是值类型,也可以是引用类型。同时C#还提供了参数数组、引用参数和输出参数以满足不同的需求。 参数数组 在函数定义时,可以定义参数数组,这样在调用该函数时可以传递不确定数量的参数,下面是一个示例: public static int Sum(params int[] numbers) { i…

    C# 2023年6月7日
    00
  • c# 调用.bat文件的实现代码

    当需要在C#程序中调用外部的.bat文件时,可以使用Process类提供的方法来实现。需要注意的是,在调用.bat文件时,需要指定其所在的完整路径。 以下是调用.bat文件的实现代码的攻略: 引入System.Diagnostics命名空间,以便使用Process类。 using System.Diagnostics; 创建Process类的实例,并设置需要…

    C# 2023年6月1日
    00
  • C# BinarySearch(Object):在整个集合中搜索指定的对象,并返回第一个匹配项的索引

    C# BinarySearch(Object) 方法完整攻略 1. 方法简介 C# BinarySearch(Object) 方法用于在已排序的一维数组中搜索指定的对象,并返回数组中指定对象的索引。该方法采用二分查找算法,如果搜索到指定对象则返回该对象的索引,否则返回一个负数。 2. 方法声明 public static int BinarySearch(A…

    C# 2023年4月19日
    00
  • C# ContainsKey(Object):确定集合是否包含具有指定键的元素

    C# ContainsKey(Object) 方法详解 在C#中,ContainsKey(Object)方法是一个用于Dictionary类中的方法。它可以用于确定指定的键是否存在于字典中,并返回一个布尔值作为结果。在这里,我们将详细讲解ContainsKey(Object)的完整攻略。 语法 public bool ContainsKey(object k…

    C# 2023年4月19日
    00
  • C#实现远程关闭和重启计算机的示例代码

    下面是关于C#实现远程关闭和重启计算机的攻略和示例代码: 1.理论知识 要实现远程关闭和重启计算机,需要使用Windows API函数,主要包括以下两个函数: ExitWindowsEx:用于向本地或远程计算机发送关闭、注销、重启等命令; WNetAddConnection2:用于在本地计算机建立远程网络连接,将本地的指定目录与远程目录进行映射。 除此之外,…

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