思归,help!!web控件问题,总是想不出好的解决办法

ahking 2003-08-19 06:15:50
首先在CreateChildControls() 创建链接数组并加入事件(事件id与paranstart相关)
for(int n=paranstart;n<=nEndPage;n++)
{
GoPage[n]=new LinkButton();
GoPage[n].Text="["+n.ToString()+"]";


GoPage[n].ID="GoPage"+n.ToString();
GoPage[n].Click+=new EventHandler(this.Gopageclicked);
nagcell.Controls.Add(GoPage[n]);
nagcell.Controls.Add(new LiteralControl(" "));

}

在另一个事件方法中控制paranstart,问题是只有调用该方法两次才能使paranstart做出相应的变化,怎么办??
...全文
23 36 打赏 收藏 转发到动态 举报
写回复
用AI写文章
36 条回复
切换为时间正序
请发表友善的回复…
发表回复
ahking 2003-08-21
  • 打赏
  • 举报
回复
可否给个i的初始值是变量的例子!!
for (int i=startcount; i < nPagerCount; i++)
{
mbuttons[i] = new LinkButton();
//mbuttons[i].Text = (i+1).ToString();
mbuttons[i].ID = "LB" + (i+1).ToString();
mbuttons[i].Click += new EventHandler(LinkButtonClick);
Controls.Add(mbuttons[i]);
Controls.Add(new LiteralControl("  "));
}

这个变量是用另一个事件控制,比如我点击按钮“下10页”,startcount=10,则linkbutton数组从mbuttons[10]开始!
ahking 2003-08-21
  • 打赏
  • 举报
回复
为什么i又是=0,是变量!!!!!!!!!!!!!!!!!!!!
for (int i=0; i < nPagerCount; i++)
{
mbuttons[i] = new LinkButton();
//mbuttons[i].Text = (i+1).ToString();
mbuttons[i].ID = "LB" + (i+1).ToString();
mbuttons[i].Click += new EventHandler(LinkButtonClick);
Controls.Add(mbuttons[i]);
Controls.Add(new LiteralControl("  "));
}
saucer 2003-08-21
  • 打赏
  • 举报
回复
here is something you can play with, I don't have time to go through it carefully, so it may not work properly:



using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.ComponentModel;

namespace CustomControls
{

[ToolboxData("<{0}:MyPageControl runat=server></{0}:MyPageControl>")]
public class MyPageControl : System.Web.UI.Control, INamingContainer
{
const int nPagerCount = 10;
Label mlbl;
Table mtbl;
int mPageCount;
LinkButton btnPrev;
LinkButton btnNext;
LinkButton[] mbuttons;

public int PageSize
{
get
{
object o = ViewState["PageSize"];
if (o == null)
return 1;
else
return (int)o;
}
set
{
ViewState["PageSize"] = value;
}
}

public int CurrentPage
{
get
{
object o = ViewState["CurrentPage"];
if (o == null)
return 0;
else
return (int)o;
}
set
{
ViewState["CurrentPage"] = value;
}
}

public int CurrentTab
{
get
{
object o = ViewState["CurrentTab"];
if (o == null)
return 0;
else
return (int)o;
}
set
{
ViewState["CurrentTab"] = value;
}
}

public int TotalCount
{
get
{
object o = ViewState["TotalCount"];
if (o == null)
return 0;
else
return (int)o;
}
set
{
ViewState["TotalCount"] = value;
}
}

protected override void CreateChildControls()
{
//create a header
mlbl = new Label();
Controls.Add(mlbl);

//create a container:
mtbl = new Table();
Controls.Add(mtbl);

//determine number of pages
mPageCount = TotalCount /PageSize;
if ( mPageCount * PageSize < TotalCount)
mPageCount++;

//create buttons
btnPrev = new LinkButton();
btnPrev.ID="PreTen";
btnPrev.Text = "Previous 10";
btnPrev.Click += new EventHandler(LinkButtonClick);
Controls.Add(btnPrev);
Controls.Add(new LiteralControl("  "));

mbuttons = new LinkButton[nPagerCount];

for (int i=0; i < nPagerCount; i++)
{
mbuttons[i] = new LinkButton();
//mbuttons[i].Text = (i+1).ToString();
mbuttons[i].ID = "LB" + (i+1).ToString();
mbuttons[i].Click += new EventHandler(LinkButtonClick);
Controls.Add(mbuttons[i]);
Controls.Add(new LiteralControl("  "));
}

btnNext = new LinkButton();
btnNext.ID="NextTen";
btnNext.Text = "Next 10";
btnNext.Click += new EventHandler(LinkButtonClick);
Controls.Add(btnNext);
Controls.Add(new LiteralControl("  "));
}

void LinkButtonClick(Object sender, EventArgs e)
{
LinkButton lb = (LinkButton)sender;
if (lb.ID.EndsWith("Ten"))
{
if (lb.ID.StartsWith("Pre"))
{
CurrentTab--;
if (CurrentTab < 0)
CurrentTab = 0;
}
else
{
CurrentTab++;
if (CurrentTab * nPagerCount > mPageCount)
CurrentTab = mPageCount/nPagerCount;
}

CurrentPage = CurrentTab * nPagerCount;
}
else
CurrentPage = Convert.ToInt32(lb.Text) - 1;
}

protected override void OnPreRender(EventArgs e)
{
base.OnPreRender (e);

mlbl.Text = "Page " + (CurrentPage+1).ToString();
int nStart = CurrentPage * PageSize;
int nEnd = (CurrentPage + 1)* PageSize ;
if (nEnd >TotalCount)
nEnd = TotalCount;

mtbl.Rows.Clear();
mtbl.GridLines = GridLines.Both;
for (int i=nStart; i < nEnd; i++)
{
TableRow tr = new TableRow();
TableCell tc = new TableCell();
tc.Text = i.ToString();
tr.Cells.Add(tc);
mtbl.Rows.Add(tr);
}

btnPrev.Visible = CurrentTab != 0;

for (int i= 0 ; i < nPagerCount; i++)
{
int nPageNumber = CurrentTab*nPagerCount + i+1;
mbuttons[i].Text = nPageNumber.ToString();
mbuttons[i].Enabled = CurrentPage % nPagerCount != i;
mbuttons[i].Visible = nPageNumber <= mPageCount;

}

btnNext.Visible = (CurrentTab +1) * nPagerCount < mPageCount;

}

}
}


ahking 2003-08-21
  • 打赏
  • 举报
回复
下面代码看不懂,不知可否解决问题?
bool IPostBackDataHandler.LoadPostData(string postDataKey,
NameValueCollection values) {
// UserInputName is defined in LoginUI.
_userName = values[UserNameInputName ];

// PasswordInputName is defined in LoginUI.
_password = values[PasswordInputName];

// Check whether the button was clicked on the
// client. If it was, tell the page to
// invoke IPostBackEventHandler.RaisePostBackEvent.
// ButtonName is defined in LoginUI.
string buttonValue = values[ButtonName];
bool buttonClicked =
(buttonValue != null) && (buttonValue.Length != 0);
if (buttonClicked) Page.RegisterRequiresRaiseEvent(this);

// Return false because we do not want to raise a
// changed event.
return false;
}

void IPostBackDataHandler.RaisePostDataChangedEvent() {
}

void IPostBackEventHandler.RaisePostBackEvent(
string eventArgument) {
OnLogon(EventArgs.Empty);
}

protected virtual void OnLogon(EventArgs e) {
EventHandler logonHandler =
(EventHandler)Events[EventLogon];
if (logonHandler != null) {
logonHandler(this, e);
}
}

protected override void OnPreRender(EventArgs e) {
base.OnPreRender(e);
Page.RegisterRequiresPostBack(this);
}

protected override void Render(HtmlTextWriter writer) {
// Ensures that this control is nested in a server form.
if (Page != null) {
Page.VerifyRenderingInServerForm(this);
}
base.Render(writer);
}
}
}

ahking 2003-08-21
  • 打赏
  • 举报
回复
思归,有没有办法将按钮post到render里呢?
ken2003 2003-08-21
  • 打赏
  • 举报
回复
up
ahking 2003-08-21
  • 打赏
  • 举报
回复
思归,我怎么才能跟你说清楚,linkbutton数组的变量值并不是从0开始的,而是从另一个变量开始的,而这个变量是用另一个事件控制,比如我点击按钮“下10页”,则linkbutton数组从mbuttons[10]开始!
ahking 2003-08-21
  • 打赏
  • 举报
回复
up
ahking 2003-08-21
  • 打赏
  • 举报
回复
知道过程也不知道怎样怎样写上面的linkbutton,另外可以在onprerender 写事件么?
ahking 2003-08-21
  • 打赏
  • 举报
回复
不好意思,刚发现你是在onPreRender中实现了text值再赋值,我怎么没想到,高!
ken2003 2003-08-21
  • 打赏
  • 举报
回复
up
ahking 2003-08-21
  • 打赏
  • 举报
回复
up
ahking 2003-08-20
  • 打赏
  • 举报
回复
up
ahking 2003-08-20
  • 打赏
  • 举报
回复
思归,如果for (int i=0; i < mPageCount; i++)中的i的初值不是0,而是一个变量,怎么写??
ken2003 2003-08-20
  • 打赏
  • 举报
回复
up
ahking 2003-08-20
  • 打赏
  • 举报
回复
up
ahking 2003-08-20
  • 打赏
  • 举报
回复
up
ahking 2003-08-20
  • 打赏
  • 举报
回复
如果要放在OnPreRender中,lbNextn.Click += new EventHandler(this.Next_nButtonClicked);事件也不得不放在OnPreRender中,会有问题么?
liuzhonghe 2003-08-20
  • 打赏
  • 举报
回复
毕竟复合控件比呈现控件速度要慢
看ms-help://MS.netframeworksdk.chs/cpguidenf/html/cpconcompositionvsrendering.htm
liuzhonghe 2003-08-20
  • 打赏
  • 举报
回复
建议用重写Render输出自己定义的html代码,那样的执行速度会更快。
加载更多回复(16)

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧