0

我持有一个名为 temptable 的临时数据表,其中包含大约 22 行,并且它已在数据网格中显示在每页的 5 条记录中考虑我在第 3 页,如果我单击上一个按钮我需要显示现在只有 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;
    }

任何人都可以帮助我吗?谢谢!

4

1 回答 1

1

尽管您可以使用 DataPager,但是如果您手动实现它,则需要考虑一些事情。

  • 页面大小
  • 当前页面
  • 总页数

仅从这些中,您可以跟踪要在 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()

这是您之前的 LinkBut​​ton 事件

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 为您提供最后记录编号。所以你插入所有包含的行并绑定到数据网格。测试它..看看它是否适合你,我远离开发机器。:)

于 2013-03-06T14:30:09.483 回答