我的asp页面中的动态链接按钮出现问题。我使用它们为网格视图进行自定义分页。这个想法是我想要显示它们20左右。它正在工作的第20个。当我显示它们时它可以。然后我按下一个显示下一个20.当我按下一个,它显示我,但如果按下一个按钮而不是最初的20,它将在前20个。
我的初始页面:
override protected void OnInit(EventArgs e)
{
base.OnInit(e);
if (this.Tag.Equals("Shareholder"))
{
InitComponents(false);
}
/// Must be done everytime the page loads.
InitializeList();
if (!IsPostBack)
InitializeUI();
}
初始化链接按钮
private void InitComponents(Boolean Prev)
{
PanelPager.Controls.Clear();
int nrInregistrari = Convert.ToInt32(DAActionar.CountActionari(11, LastBtnIndex));
if (Prev == true)
{
LinkButton lnkPrev = new LinkButton();
lnkPrev.Text = "Prev";
PanelPager.Controls.Add(lnkPrev);
}
int BtnDeAfisat = 0;
if (nrInregistrari > BTN_PER_SERIE * PAGE_SIZE)
{
BtnDeAfisat = BTN_PER_SERIE;
}
else
BtnDeAfisat = nrInregistrari / PAGE_SIZE + 1;
for (int index = 1; index <= BtnDeAfisat; index++)
{
int pageNo = index + LastBtnIndex;
LinkButton lnk = new LinkButton();
lnk.Click += new EventHandler(PageChange);
lnk.ID = "PageLink" + pageNo.ToString();
lnk.CommandName = "Page";
lnk.Text = " " + pageNo.ToString() + " ";
lnk.CommandArgument = index.ToString();
PanelPager.Controls.Add(lnk);
}
LinkButton lnkNext = new LinkButton();
lnkNext.Click += new EventHandler(NextPage);
lnkNext.Text = "Next";
PanelPager.Controls.Add(lnkNext);
LastBtnIndex += BtnDeAfisat;
}
下一个按钮的事件
private void NextPage(object sender, EventArgs e)
{
InitComponents(true);
}
PageChange:
public void PageChange(object sender, EventArgs e)
{
int pageIndex = int.Parse((sender as LinkButton).CommandArgument) + 1;
object dataSource = GetDataSource(OwnerId, null, pageIndex);
PushData(dataSource);
}
答案 0 :(得分:0)
在ASP.NET中,只有作为Page_Load一部分添加的控件才会附加事件并执行。同样在执行服务器端事件时,页面将自身发回,在此期间首先执行page_load,然后执行事件处理程序代码。
因此,您执行了第一组按钮事件,因为它们作为page_load的一部分附加到事件中。现在,在这些按钮的事件中,您正在调用InitComponents方法。因此,正如我在事件期间首先解释的那样,page_load首先调用InitComponents方法,该方法向面板添加按钮,但InitComponents方法再次作为事件处理程序代码的一部分执行,该代码从Panel中删除控件并重新创建它们并将它们再次添加到Panel。 / p>
现在,因为在第二次执行InitComponents方法期间创建的控件不是page_load的一部分,所以当您单击它们时,附加到它们的流事件不会触发。它只是回发了再次执行InitComponents的页面,并在面板中创建了新的控件,他们的事件工作正常,因为它们是作为page_load流程的一部分创建的。
如果它让你困惑,请原谅我。
现在解决方法是使用一个控件,它可以根据项目数自动为你创建许多按钮,并且一直触发事件。
我现在没有任何工作适合你。我发现这篇文章带有工作示例代码,您可以将其视为示例并在您的工作中实现。
http://www.aspsnippets.com/Articles/Implement-Paging-in-DataList-control-in-ASPNet.aspx
该示例说明了如何显示页码以及如何根据所选页码绑定数据。