2017-01-19 4 views
0

私は自分のデータベースに多くの情報を持っているので、asp.netで私のgridviewのカスタムページングをしたいのです。私の問題は、リンクボタンを生成するときです。私はそれらをパネルに入れましたが、私のページには7000個以上のボタンがあります。私はそれらを私のパネルに加えると、私のページの10行に私のすべてが表示されます。私は10だけを表示する必要があり、最後のボタンを押すと他の10個のボタンが表示されます。 マイコード:asp.netのグリッドビューのカスタムページング

for (int index = 0; index < nrPages; index++) 
       { 
        int pageNo = index + 1; 
        LinkButton lnk = new LinkButton(); 
        lnk.Click += new EventHandler(PageChange); 

        lnk.ID = "PageLink" + pageNo.ToString(); 
        lnk.CommandName = "Page"; 
        lnk.Text = " " + pageNo.ToString() + " "; 
        lnk.CommandArgument = index.ToString(); 

        PanelPager.Controls.Add(lnk); 
       } 

public void PageChange(object sender, EventArgs e) 
     { 
      int pageIndex = int.Parse((sender as LinkButton).CommandArgument); 
      object dataSource = GetDataSource(OwnerId, null, pageIndex); 
      PushData(dataSource); 

     } 

ここで私はあなたの実際のデータのページ付けを行っているとロジックが同じページネーションになるので、単純にページ番号のページネーションをやっている私のLinkBut​​ton

+0

を使用しています。 –

+0

GridViewがロードされるたびに、70.000以上の行はすべてデータベース/ビューステートから取得されます。これは、わずか10行を表示するための余分なトラフィックがたくさんあることを意味します。 Ajaxを使用してページ・データセットを取得します。 – VDWWD

+0

@VDWWD。いいえ、私はSQL ServerでROW_NUM()を使用し、ページインデックスとページサイズの間でのみロードします。 – user7383186

答えて

0
int nrPages = 7000; 

public void RenderPageNumbers(int nextPageNo) 
{ 
    int pageSize = 10; 
    int totalPages = nrPages/pageSize; 
    var startIndex = ((nextPageNo -1) * pageSize) + 1 
    for (int index = startIndex; index < startIndex + pageSize; index++) 
    { 
     int pageNo = index; 
     LinkButton lnk = new LinkButton(); 
     lnk.Click += new EventHandler(PageChange); 

     lnk.ID = "PageLink" + pageNo.ToString(); 
     lnk.CommandName = "Page"; 
     lnk.Text = " " + pageNo.ToString() + " "; 
     lnk.CommandArgument = index.ToString(); 

     PanelPager.Controls.Add(lnk); 
    } 
} 
+0

PanelPagerのコマンドは何ですか? – user7383186

+0

リンクのcommandArgumentを設定していますか?どのように使用する予定ですか? –

+0

私の編集を見て、私はインデックスページを知って、いくつかの行だけをデータベースから持ってきます。 – user7383186