0

作成中のページャー コントロールに問題があります。私のコードは次のとおりです

protected override void CreateChildControls()
{
  base.CreateChildControls();

  pnl = new Panel { ID = "NewsPager", CssClass = "NewsPager" };
  Controls.Add(ddl);

  AddPagerControls();
}

AddPagerControls は、同じイベント ハンドラーを使用する一連の LinkBut​​ton を追加します。

private void li_Click(object sender, EventArgs e)
{
  selectedValue = ((LinkButton) sender).CommandArgument;
  AddPagerControls();
}

ここで何が起こるかというと、「次へ」LinkBut​​ton を追加すると、次を使用して CommandArgument が正しく設定されます。

var liNext = new LinkButton {ID = "NewsPagerLinkNext", Text = ">", CommandArgument = (int.Parse(value) + 1).ToString()};
liNext.Click += new EventHandler(li_Click);
pnl.Controls.Add(liNext);

つまり、現在のページが 2 の場合、コードのデバッグ時に [次へ] ボタンの CommandArgument は 3 になります。ただし、ページがレンダリングされ、次のボタンをクリックすると、(ページ 1 から 2 に移動する) 1 回は機能しますが、コードでは 3 に設定されていても、常に 2 になります。レンダリングされます。

私はここで少し途方に暮れています。CreateChildControls の AddPagerControls への呼び出しを if(!Page.IsPostBack){AddPagerControls();} に変更しようとしましたが、イベント ハンドラーはまったく起動しません。

編集: AddPagerControls メソッドがイベント ハンドラーから呼び出されると、PSI は pnl.Controls.Clear() を実行します。そうしないと、LinkBut​​tons が 2 回追加されます。

編集:PPSページが存在する場合、5つのリンクのみを表示する必要があるため、毎回追加するリンクボタンを再計算します。

<< < 2 3 4 5 6 7 > >>

4

1 に答える 1

0

私が理解できないのは、ページング コントロールを常に再生成する理由です。リンクボタン「前」と「次」があり、コントロールのビューステートで(個別のプロパティとして)表示されている現在のページとアイテムの量(つまりページサイズ)?

イベント ハンドラーでは、現在のページが次のようなものになることがわかっているため、適切なアクションを実行しますcurrentPageIndex+1。特にlハンドラーで前/次のボタンを常に再生成することはi_Click、私の観点からは良いアプローチではなく、これも問題の原因となる可能性があります。

于 2009-06-23T09:25:43.083 に答える