求救!!! 自定义控件的问题

lo_back___ 2010-08-17 10:23:07
小弟在自学自定义控件,于是尝试做一个GridView的分页控件.在实习过程中遇到了以下问题,GridView的绑定,自定义控件的事件都没有问题,而且自定义控件能够获取到GridView的当前页索引,但是GridView的翻页总是无效.冥思苦想了很多天 还是没有结果,觉得可能是因为自己还没有理解到控件的生命周期和数据回发机制.麻烦各位耽搁一点宝贵的时间来帮我看看这个的原因是什么.小弟不胜感激!
以下是我的自定义控件的全部代码 WebControl.cs

using System;
using System.Data;
using System.Collections.Generic;
using System.ComponentModel;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Collections.Specialized;

namespace CreateWebControl
{
//定义一个事件类,用于记录一组LinkButton中被点击的LinkButton是哪一个.
public class EventLinkButtonArgs : EventArgs
{
private int _ClickedIndex;

public EventLinkButtonArgs()
{

}

public int ClickedIndex
{
get
{
return this._ClickedIndex;
}
set
{
this._ClickedIndex = value;
}
}
}

//定义一个委托,用于处理数字链接.
public delegate void LnkBtnListEventHandler(object sender, EventLinkButtonArgs e);
public event LnkBtnListEventHandler RegisterLnkBtnListClick;
public class Pager : CompositeControl
{
private Label _lblCurrentPage;
private Label _lblAllPage;
private TextBox _txtToPage;
private Button _btnToPage;
private Button _btnNext;
private Button _btnPrev;
private LinkButton _lnkToPage;

private GridView _GvdControl;
private DataTable _DtControl;

private int _NumPage;
private int _PageLnkTo;
private int _Cellspacing;
private int _Cellpadding;

#region 分页控件所需的属性

[Category("Layout")]
[Description("呈现的样式")]
public PagerLayout PgLayout
{
get
{
return this._PgLayout;
}
set
{
this._PgLayout = value;
}
}

[Category("Data")]
[Description("绑定使用控件分页的GridView")]
public GridView ObjectGridView
{
get
{
return _GvdControl;
}
set
{
_GvdControl = value;
}
}

[Category("Data")]
[Description("GridView的数据源DataTable")]
public DataTable DtControl
{
get
{
return _DtControl;
}
set
{
_DtControl = value;
}
}

[DefaultValue(3)]
[Category("Appearance")]
[Description("显示链接的页码数")]
public int NumPage
{
get
{
return this._NumPage;
}
set
{
this._NumPage = value;
}
}

#endregion

public Pager()
{
this._NumPage = 3;
this._PgLayout = PagerLayout.Horizontal;
this._PageNowIndex = 0;
this._AutoPostBack = false;

if (this.ObjectGridView == null)
{
this._GvdControl = new GridView();
}
if (this.DtControl == null)
{
this._DtControl = new DataTable();
}
}

protected override void CreateChildControls()
{
this.Controls.Clear();

_txtToPage = new TextBox();
_txtToPage.ID = "txtToPage";
_txtToPage.Width = Unit.Pixel(Convert.ToInt32(this.Width.Value * 0.1));
_txtToPage.Height = this.Height;
this.Controls.Add(this._txtToPage);

_btnToPage = new Button();
_btnToPage.ID = "btnToPage";
_btnToPage.Text = "转到";
_btnToPage.Width = Unit.Pixel(Convert.ToInt32(this.Width.Value * 0.1));
_btnToPage.Height = this.Height;
this._btnToPage.Click += new EventHandler(btnToPage_Click);
this.Controls.Add(this._btnToPage);

_btnNext = new Button();
_btnNext.ID = "btnNext";
_btnNext.Text = "下一页";
_btnNext.Width = Unit.Pixel(Convert.ToInt32(this.Width.Value * 0.1));
_btnNext.Height = this.Height;
this._btnNext.Click += new EventHandler(btnNext_Click);
this.Controls.Add(this._btnNext);

_btnPrev = new Button();
_btnPrev.ID = "btnPrev";
_btnPrev.Text = "上一页";
_btnPrev.Width = Unit.Pixel(Convert.ToInt32(this.Width.Value * 0.1));
_btnPrev.Height = this.Height;
this._btnPrev.Click += new EventHandler(btnPrev_Click);
this.Controls.Add(this._btnPrev);

for (int i = 1; i <= this._NumPage; i++)
{
_lnkToPage = new LinkButton();
_lnkToPage.ID = "lnkBtn" + i.ToString();
_lnkToPage.Text = i.ToString();
_lnkToPage.Height = this.Height;
_lnkToPage.Click += new EventHandler(lnkToPage_Click);

this.Controls.Add(this._lnkToPage);
}

_lblCurrentPage = new Label();
_lblCurrentPage.ID = "lblCurrentPage";
_lblCurrentPage.Text = "当前页:" + this.ObjectGridView.PageIndex.ToString();
_lblCurrentPage.Width = Unit.Pixel(Convert.ToInt32(this.Width.Value * 0.15));
_lblCurrentPage.Height = this.Height;
this.Controls.Add(this._lblCurrentPage);

_lblAllPage = new Label();
_lblAllPage.ID = "lblAllPage";
_lblAllPage.Text = "总页数:" + this.ObjectGridView.PageCount.ToString();
_lblAllPage.Width = Unit.Pixel(Convert.ToInt32(this.Width.Value * 0.15));
_lblAllPage.Height = this.Height;
this.Controls.Add(this._lblAllPage);

this.ChildControlsCreated = true;
}

protected void FnBindGridView()
{
this.ObjectGridView.DataSource = this.DtControl;
this.ObjectGridView.DataBind();
}

protected void lnkToPage_Click(object sender, EventArgs e)
{
EventLinkButtonArgs ex = new EventLinkButtonArgs();

LinkButton lnkBtn = new LinkButton();
lnkBtn = sender as LinkButton ?? new LinkButton();
ex.ClickedIndex = Convert.ToInt32(lnkBtn.Text);

this.lnkToPage_RegisterLnkBtnClick(sender, ex);
}

protected void lnkToPage_RegisterLnkBtnClick(object sender, EventLinkButtonArgs e)
{
if (this.RegisterLnkBtnListClick != null)
{
this.RegisterLnkBtnListClick(this, e);
}
else
{
this.ObjectGridView.PageIndex = e.ClickedIndex;
}
FnBindGridView();
}

protected void btnPrev_Click(object sender, EventArgs e)
{
if (this.ObjectGridView.PageIndex > 0 && this.ObjectGridView.PageIndex <= this.ObjectGridView.PageCount)
{
this.ObjectGridView.PageIndex--;
}
else
{

}
FnBindGridView();
}

protected void btnNext_Click(object sender, EventArgs e)
{
if (this.ObjectGridView.PageIndex >= 0 && this.ObjectGridView.PageIndex <= this.ObjectGridView.PageCount)
{
this.ObjectGridView.PageIndex++;
}
else
{

}
FnBindGridView();
}

protected void btnToPage_Click(object sender, EventArgs e)
{
if (Convert.ToInt32(this._txtToPage.Text.ToString()) <= this.ObjectGridView.PageCount && Convert.ToInt32(this._txtToPage.Text.ToString()) >= 0)
{
this.ObjectGridView.PageIndex = Convert.ToInt32(this._txtToPage.Text.ToString());
}
else
{

}
FnBindGridView();
}

protected override void Render(HtmlTextWriter writer)
{
writer.AddAttribute(HtmlTextWriterAttribute.Cellspacing, "0");
writer.AddAttribute(HtmlTextWriterAttribute.Cellpadding, "0");
writer.AddAttribute(HtmlTextWriterAttribute.Border, "0");
writer.RenderBeginTag(HtmlTextWriterTag.Table);

writer.RenderBeginTag(HtmlTextWriterTag.Tr);
writer.RenderBeginTag(HtmlTextWriterTag.Td);
this._lblAllPage.RenderControl(writer);
writer.RenderEndTag();
writer.RenderBeginTag(HtmlTextWriterTag.Td);
this._lblCurrentPage.RenderControl(writer);
writer.RenderEndTag();
writer.RenderBeginTag(HtmlTextWriterTag.Td);
this._btnPrev.RenderControl(writer);
writer.RenderEndTag();
for (int i = 1; i <= this._NumPage; i++)
{
writer.RenderBeginTag(HtmlTextWriterTag.Td);
this.Controls[i + 3].RenderControl(writer);
writer.RenderEndTag();
}
writer.RenderBeginTag(HtmlTextWriterTag.Td);
this._btnNext.RenderControl(writer);
writer.RenderEndTag();
writer.RenderBeginTag(HtmlTextWriterTag.Td);
this._txtToPage.RenderControl(writer);
writer.RenderEndTag();
writer.RenderBeginTag(HtmlTextWriterTag.Td);
this._btnToPage.RenderControl(writer);
writer.RenderEndTag();
writer.RenderEndTag();

writer.RenderEndTag();
}
}
}

}
...全文
83 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
charlie_zhuo 2010-08-18
  • 打赏
  • 举报
回复
帮顶~
lo_back___ 2010-08-18
  • 打赏
  • 举报
回复
没人愿意帮忙么?
sunnj87 2010-08-17
  • 打赏
  • 举报
回复
从来不用gridview的绑定。可以设断点,一步步跟。
huangmin3956 2010-08-17
  • 打赏
  • 举报
回复
好长 防沉
lo_back___ 2010-08-17
  • 打赏
  • 举报
回复
4楼能说具体一点吗?
wuyq11 2010-08-17
  • 打赏
  • 举报
回复
看看aspnetpager分页控件
viewstate保存分页页码
空气 2010-08-17
  • 打赏
  • 举报
回复
好长。。。

8,834

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 组件/控件开发
社区管理员
  • 组件/控件开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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