0

私は約22行を保持するtemptableと呼ばれる一時データテーブルを保持しており、各ページの5つのレコードでデータグリッドに表示されています。前のボタンをクリックすると、表示する必要がある2つのレコードしかない3ページ目にいると考えてください。以前の (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;
    }

誰でも私を助けてくれますか pls ありがとう !!

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 に答える