6

MSSQL から多くの情報を取得する検索を使用して Web ページを作成しています。私が行ったのは、Web サイトで表示されるページのみを返すストアド プロシージャです。

現在、Google に似たものを表示する必要があるため、ページングに取り組んでいます。1ページ目にいる場合は最初の10ページが表示され、19ページにある場合は9ページから28ページまでが表示されます.

ページ番号を表示する最良のオプションは、リピーター内でリンクボタンを使用することだと思います。私が今抱えている問題は、ポストバックでページ番号を取得する最良の方法がわからないことです。

簡単なサンプルを実行して、ArrayList を repeater.datasource に割り当てました。

  <asp:Repeater ID="Repeater2" runat="server">
    <ItemTemplate>
            <asp:LinkButton ID="LinkButton1" runat="server" CommandArgument="<%# Container.DataItem %>"><%# Container.DataItem %></asp:LinkButton>
    </ItemTemplate>
  </asp:Repeater>
  <asp:LinkButton ID="LinkButton2" runat="server" CommandArgument="4654">Test #1</asp:LinkButton>

私の Default.aspx.cs ファイルには、次のコードがあります

    protected void Page_Load(object sender, EventArgs e)
    {
        if (this.IsPostBack)
        {
            string x = LinkButton2.CommandArgument;
            //string y = LinkButton1.CommandArgument;
//I know this line will not work since the Linkbutton1 is inside the Repeater.
            }

機能させるにはどうすればよいですか?

このページングのより良い解決策はありますか?

ありがとうございました

ジェリー

4

4 に答える 4

10

ItemCommandイベントを探しています:

  <asp:Repeater ID="Repeater1" OnItemCommand="ItemCommand" runat="server">
    <ItemTemplate>
      <asp:LinkButton CommandName="ButtonEvent" CommandArgument="<%# Container.DataItem %>" Text="<%#Container.DataItem %>" runat="server"></asp:LinkButton>
    </ItemTemplate>
  </asp:Repeater>

背後にあるコード:

protected void Page_Load(object sender, EventArgs e)
{
  if (!Page.IsPostBack)
  {
    Repeater1.DataSource = Enumerable.Range(1, 10);
    Repeater1.DataBind();
  }
}

protected void ItemCommand(Object Sender, RepeaterCommandEventArgs e)
{
  Response.Write("The no. " + ((LinkButton)e.CommandSource).Text + " button was clicked!");
}

...しかし、本当にLinkBut​​tonが必要ですか?プレーンなHTMLアンカータグも同様に機能する可能性があり、あいまいさが少なくなります。:)

于 2010-02-26T00:37:46.457 に答える
0

ページングがどのタイプのコントロールであるかを述べたことはありません。ASP.Net 3.5 を使用している場合は、ListView コントロールを使用し、DataPager コントロールでページングを処理することを強くお勧めします。

于 2010-02-26T00:32:03.643 に答える
0

私は@JakobGadeを使用しましたが、これが私にとってうまくいきました:

<asp:Repeater ID="rpMemList" runat="server" ClientIDMode="Static" 
onitemcommand="rpMemList_ItemCommand">
     <ItemTemplate>

          <asp:LinkButton ID="lbMember" CommandArgument='<%# Eval("memID")%>' CommandName="SelMem" runat="server" ClientIDMode="Predictable"><%# Eval("memFullName")%></asp:LinkButton>

     </ItemTemplate>
</asp:Repeater>

次に、コード ビハインド内でテストしました。

    protected void rpMemList_ItemCommand(object source, RepeaterCommandEventArgs e)
    {
        string a = e.CommandArgument.ToString();
        string b = e.CommandName.ToString();
        string c = e.CommandSource.ToString();
        string d = e.Item.ToString();

    }
于 2012-07-11T19:34:32.983 に答える
0

考えただけですが、「DataGrid」オブジェクトを使用して列を追加し、それを項目テンプレートにして、書式設定されたテンプレート内で繰り返す必要がある要素を入れてみましたか。true に設定すると、DataGrid はページングも自動的に処理します...

于 2010-02-26T00:26:14.367 に答える