6

我正在做一个网页,其中包含来自 MSSQL 的大量信息的搜索。我所做的是一个存储过程,它只返回要在网站上看到的页面。

现在我正在处理分页,因为我需要展示与谷歌类似的东西。如果你在第 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

我使用了@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 回答
0

您从未说明您的分页是哪种类型的控件。如果您使用的是 ASP.Net 3.5,那么我强烈建议您使用 ListView 控件并使用 DataPager 控件处理分页。

于 2010-02-26T00:32:03.643 回答