C# 分页-在c中列出datatable中以前的一组值# 我保存一个名为TEMPTATE的临时数据表,它保存了大约22行,它已经在DATAGRID中显示在每个页面中的5个记录中,考虑到我在第三页,在那里,B将只记录2个记录,如果我点击上一个按钮,我需要显示前一组(15-20)5个值,并且如果我点击之前它应该显示(10—15)。5.价值观等等

C# 分页-在c中列出datatable中以前的一组值# 我保存一个名为TEMPTATE的临时数据表,它保存了大约22行,它已经在DATAGRID中显示在每个页面中的5个记录中,考虑到我在第三页,在那里,B将只记录2个记录,如果我点击上一个按钮,我需要显示前一组(15-20)5个值,并且如果我点击之前它应该显示(10—15)。5.价值观等等,c#,datagridview,datatable,paging,C#,Datagridview,Datatable,Paging,我已经把代码贴在这里了。。这里的问题是,我只能检索前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 ' an

我已经把代码贴在这里了。。这里的问题是,我只能检索前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;
    }
有人能帮我吗
谢谢
  • 页面大小
  • 当前页
  • 总页数
只有通过这些,您才能跟踪要在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();
}
在页面的页面加载事件中调用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()

publilc void BindGrid()
{
tempDt.Clear();

对于(int i=(currentPage*pageSize);i什么是
d
什么是
g
,什么是
acc
?您介意为我们(和您)使用更有意义的变量名吗?@Mainsh-Mishra:非常感谢您的回复..上面的逻辑对我来说非常有效..再次感谢..@Mainsh-Mishra:一个小的澄清,上面的逻辑适用于5页,一组25行。我的意思是每页5行假设如果我需要使pagesize通用,我的意思是应该能够添加n行,但表应该是ld只显示5行以供使用..这正是我需要做的..请帮助我更改'pageSize'变量值;它完全是generic@Mainsh米斯特拉:如果我试着改变页面大小,比如说,对于例如10,它会倾向于每页显示10行。但是我需要在一个有n页的表格中显示5条记录,有可能吗..页面大小意味着,数字在网格的一页中显示记录的数量。因此,它可以正常工作。如果您只想显示5条记录,请将pageSize设置为5,您还需要什么?“n个页面”表示“?”您是指页面按钮还是总页面??
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;   
}