下面是“C# DataTable分页处理实例代码”的完整攻略:
什么是DataTable分页处理?
DataTable是.NET Framework中的一个非常重要的数据对象,它可以用来存储和操作数据。很多时候,我们需要在规模较大的数据集中只提取部分数据进行显示,这时就需要进行分页处理。
如何进行DataTable分页处理?
在C#中,可以通过以下步骤来进行DataTable的分页处理:
- 使用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);
}
}
- 对数据进行分页处理,仅保留需要的数据。
// 计算总页数
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);
}
- 将分页处理后的数据进行显示,可以使用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(" "));
}
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(" "));
}
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技术站