分页——在c#中列出数据表中以前的一组值
本文关键字:一组 分页 数据表 | 更新日期: 2023-09-27 18:02:37
我持有一个名为temptable的临时数据表,它保存了大约22行,它已经在数据网格中显示在每页的5条记录中,考虑我在第三页,现在只有2条记录,如果我点击上一个按钮,我需要显示上一组(15-20)5个值,如果我点击上一个,它应该显示(10 - 15)5个值等等。
我已经粘贴了我的代码在这里。这里的问题是,我只能检索前5个值,我的意思是15 - 20 ..我需要把它变成通用的,但是我不能从中得到灵感
private void PreviousSelect_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
TempTable.Clear();
/* if Total_Temp_Table_rowCount is 22 int a will be ' 2 ' and
int b will return 20 */
int a = Total_Temp_Table_rowCount % 5;
int b = Total_Temp_Table_rowCount- a;
for (int s = b-1 ; s >= b - 5; s--)
{
fieldLabel = (string)selectedFieldsTable.Rows[s]["Field Name"].ToString();
fieldType = (string)selectedFieldsTable.Rows[s]["Field Type"].ToString();
DataRow newRows = TempTable.NewRow();
newRows["Field Name"] = fieldLabel;
newRows["Field Type"] = fieldType;
TempTable.Rows.Add(newRows);
Console.WriteLine(selectedFieldsTable.Rows[s]["Field Name"].ToString());
}
dgvSelectedFieldsView.DataSource = TempTable;
}
有谁能帮帮我吗谢谢! !
虽然您可以使用DataPager,但如果您手动实现它,则需要考虑以下几点:
- 页大小
- 当前页
- TotalPages
从这些你可以跟踪当前的记录集填充在dataGridView。
看我下面的逻辑:你可能需要微调循环的开始和结束点。但它应该给你一个想法。
public int currentPage =0;
public int totalPages=0;
public int pageSize=5;
public DataTable tempDt = new DataTable();
public void LoadGrid()
{
//calculate the total number of pages..
double result = (double)selectedFieldsTable.Rows.Count/pageSize;
if(result>(selectedFieldsTable.Rows.Count/pageSize))
++result;
totalPages = result;
foreach (DataColumn col in selectedFieldsTable.Columns)
{
tempDt.Columns.Add(col);
}
BindGrid();
}
在Page
的Page_Load事件中调用LoadGrid()这是你以前的LinkButton事件
private void PreviousSelect_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
currentPage--;
if(currentPage<0)
{
(sender as LinkButton).Enabled=false;
}
else
{
BindGrid();
}
}
这是你的下一个链接按钮事件
private void NextSelect_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
currentPage++;
if(currentPage>=PageSize)
{
(sender as LinkButton).Enabled=false;
}
else
{
BindGrid();
}
}
这是你的BindGrid()
pubilc void BindGrid()
{
tempDt.Clear();
for(int i=(currentPage*pageSize);i<(currentPage*pageSize)+pageSize; i++)
{
DataRow row = tempDt.NewRow();
foreach(DataColumn col in tempDt.Columns)
{
row[col] = selectedFieldsTable.Rows[i][col];
}
tempDt.Rows.Add(row);
}
dgvSelectedFieldsView.DataSource = tempDt;
}
CurrentPage *PageSize为您提供开始记录编号,CurrentPage*PageSize + PageSize为您提供最后记录编号。因此,您插入所有包含的行并绑定到数据网格。测试一下,看看它是否适合你,我远离开发机器:)