我正在做一个带有搜索的网页,这些搜索带来了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.
}
我该怎么做才能使它有效?
有没有人有更好的解决方案?
谢谢
杰里
答案 0 :(得分:9)
您正在寻找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!");
}
...但你真的确定你需要LinkButton吗?一个普通的HTML锚标签也可以正常工作,并且它的模糊性较低。 :)
答案 1 :(得分:0)
只是想一想,您是否尝试过使用“DataGrid”对象,添加一个列,使其成为一个项目模板,然后放入您需要在格式化的模板中重复的元素。当设置为true时,DataGrid也会自动处理分页...
答案 2 :(得分:0)
你从未说过你的分页是什么类型的控制。如果您使用的是ASP.Net 3.5,那么我强烈建议使用ListView控件并使用DataPager控件处理分页。
答案 3 :(得分: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();
}