2012-01-11 8 views
0

リストコントロールのページングを実装するためにカスタムページングクラス(Pagger)を作成しました。カスタムページングのPostBackの後のダイナミックコントロールの値を読み取る

今、Paggerオブジェクトナビゲーションbtnsが含まASP:Panel生成 - ASP:LinkButton - それが

例にナビゲートしなければならないpageNumber内部記憶BTN生成された各ナビゲーションを担当する:
enter image description here

私はAjax-ASP:UpdatePanelを使用してページングを強化するため、それぞれpaging panel,
をそれぞれ囲みます。btn's clickPostBackが起こるので、私は再作成されたすべてのbtnsOnPreInitのページイベントを彼らが明白である - つまり、再び利用できるようにする、そしてそれがpageNumberを知るために、今question-

protected override void OnPreInit(EventArgs e) 
    { 
     Pagger p = new Pagger(itemsCount, itemsPerPage); 

     //Here the pager reads from viewstate to know 
     //which pageNumber is the currentPage and generates btns according to it 
     p.GeneratePaggerPanel(CurrentPageNumber); 
     Panel1.Controls.Add(p.PaggerPanel); 

     //link the LinkBtn to event handler to be executed upon clicking 
     foreach (Control c in p.PaggerPanel.Controls) 
     { 
      if (c is LinkButton) 
      { 
       ((LinkButton)c).Click += Button1_Click; 
      } 
     } 
     base.OnPreInit(e); 
    } 

、ではありませんViewState

public uint CurrentPageNumber 
    { 
     get 
     { 
      if (ViewState["CurrentPageNumber"] != null) 
       return (uint)ViewState["CurrentPageNumber"]; 
      return 1; 
     } 
     set 
     { 
      ViewState["CurrentPageNumber"] = value; 
     } 
    } 

protected void Button1_Click(object sender, EventArgs e) 
{ 
    CurrentPageNumber = ((PaggerLinkButton)sender).Tag; 
} 

しかしbtnEvent Clickで、私はそれを格納するために行ってきましたcurrentPageNumberpage_load後、thatsのは、ときre-creating番目ViewStateが利用できるように文句を言わないわけトリガされますOnPreInitイベントの電子pager btns
はどのように私はpager btns panelので、ページャは同じPostBackcurrentPageNumberを使用することができますし、別のPostBackを行うには待っていない初期化する前にpressed btn's valueを読み取ることでViewState値を設定することができますか?

私はASP.NET Page Life Cycle Overviewも読んだことがありますが、何も本当に助けになりませんでした。

P.S:PaggerLinkButtonは、あなたはオプションのカップルを(私はオフに考えることができることを)持っているつの新しいプロパティを持つLinkButtonTag

答えて

0

から継承されます。

  1. サーバー側Button1_clickメソッドをリンクボタンのクライアント側クリックイベントハンドラーに置き換えます。このクライアントサイドのメソッドは、ページ値をフォームの隠しコントロールに設定する必要があります。タグ属性を持つカスタムlinkbuttonクラスは必要ありません。単に、クライアント側のページ値をクリックハンドラコード(OnClick = 'setPageNo(x); return true;'など)に設定します。その後、OnPreInitの中で、現在のページ番号を隠しコントロールから取得します。

  2. あなたは、各ポストバックでPaggerPanelコントロールを再作成している(ビューステートに頼るとは反対に)しかし、あなたは(a)のパネルの作成myPanel = p.GeneratePaggerPanelにGeneratePaggerPanel方法でロジックを分離することができるはず、なぜ私はわかりません()OnPreInitで行われ、(b)Button1_clickメソッド内で行われる現在のページ固有の変更p.FixPaggerPanel(myPanel、CurrentPageNo)です。

ホープこれは、 歓声、 ニック

を支援します
関連する問題