【问题标题】:Linkbutton inside Repeater for paging ASP.Net用于分页 ASP.Net 的中继器内的链接按钮
【发布时间】:2010-02-26 00:16:25
【问题描述】:

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

现在我正在处理分页,因为我需要显示与 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.
            }

我应该怎么做才能使它起作用?

有没有人对此分页有更好的解决方案?

谢谢

杰瑞

【问题讨论】:

    标签: c# asp.net repeater paging linkbutton


    【解决方案1】:

    您正在寻找 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 锚标记可能也能正常工作,而且不那么模糊。 :)

    【讨论】:

    • 不客气,很高兴为您提供帮助。不要忘记为您的问题标记选择已接受的答案。 :)
    • 感谢 Jakob。答案值得被接受。
    【解决方案2】:

    只是一个想法,您是否尝试过使用“DataGrid”对象,添加一列,使其成为项目模板,然后将您需要在格式化的模板中重复的元素放入。设置为 true 时,DataGrid 还会自动处理分页...

    【讨论】:

    • 嗯,使用自动分页的问题是我需要从数据库中获取所有寄存器并使其更快,我想返回将显示的内容;)
    【解决方案3】:

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

    【讨论】:

    • 我所看到的是 Datapager 需要一个分配给自动分页的控件,为此我需要从数据库中获取所有寄存器并使其更快,我想返回将显示的内容
    【解决方案4】:

    我使用了@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();
    
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-25
      • 1970-01-01
      • 2011-11-04
      • 1970-01-01
      • 2013-10-16
      • 2010-12-18
      相关资源
      最近更新 更多