自定义控件中,继承gridview,如何去掉viewstate而不会引起功能的问题?高分!!!!高手以入
mint 2007-11-25 11:25:21 自定义扩展了一个gridview控件,其代码如下一个:
namespace CtbujxLib
{
[DefaultProperty("Text")]
[ToolboxData("<{0}:JAGridView runat=server></{0}:JAGridView>")]
public class JAGridView : Anthem.GridView, INamingContainer
{
//翻页按钮
private Anthem.LinkButton lbtnFirst;
private Anthem.LinkButton lbtnPrev;
private Anthem.LinkButton lbtnNext;
private Anthem.LinkButton lbtnLast;
//当前页数 总页数 每页记录数 总记录数
private Anthem.Label lbPageIndex;
private Anthem.Label lbPageCount;
private Anthem.Label lbPageSize;
private Anthem.Label lbRecordCount;
//记录总数
private int recordCount;
private Anthem.TextBox txtbGoPageIndex;
private Anthem.Button btnGo;
//初始化GridView参数
protected override void OnLoad(EventArgs e)
{
this.AllowPaging = true;
this.PagerSettings.Visible = true;
base.OnLoad(e);
}
protected override void InitializePager(GridViewRow row, int columnSpan, PagedDataSource pagedDataSource)
{
//获取记录总数
recordCount = pagedDataSource.DataSourceCount;
//初始化 导航按钮
lbtnFirst = new Anthem.LinkButton();
lbtnFirst.ID = "lbtnFirst";
lbtnFirst.Text = "首页";
lbtnFirst.CommandName = "First";
lbtnFirst.Command += new CommandEventHandler(lbtn_Command);
lbtnPrev = new Anthem.LinkButton();
lbtnPrev.ID = "lbtnPrev";
lbtnPrev.Text = "上一页";
lbtnPrev.CommandName = "Prev";
....
SetPagerStatus();
}
protected void btnGo_Onclick(object sender, CommandEventArgs e)
{
int GoPageIndex;
try
{
GoPageIndex = int.Parse(txtbGoPageIndex.Text.Trim());
if (GoPageIndex <= PageCount && GoPageIndex > -1)
{
PageIndex = GoPageIndex-1;//默认的内容比那个要多
}
}
catch(Exception e1)
{
//出错,忽略;
}
}
//点击按钮时 进行翻页
void lbtn_Command(object sender, CommandEventArgs e)
{
switch (e.CommandName)
{
case "First":
{
PageIndex = 0;
break;
}
case "Prev":
{
if (PageIndex > 0)
{
PageIndex--;
}
break;
}
case "Next":
{
if (PageIndex + 1 < PageCount)
{
PageIndex++;
}
break;
}
case "Last":
{
PageIndex = PageCount - 1;
break;
}
}
}
//设置分页状态
public void SetPagerStatus()
{
//如果没记录则不显示
if (PageCount == 0)
{
this.Visible = false;
return;
}
//第一页
if (PageIndex == 0)
{
lbtnFirst.Enabled = false;
lbtnPrev.Enabled = false;
lbtnNext.Enabled = true;
lbtnLast.Enabled = true;
}
//最后一页
else if (PageIndex == PageCount - 1)
{
lbtnFirst.Enabled = true;
lbtnPrev.Enabled = true;
lbtnNext.Enabled = false;
lbtnLast.Enabled = false;
}
//中间页
else
{
lbtnFirst.Enabled = true;
lbtnPrev.Enabled = true;
lbtnNext.Enabled = true;
lbtnLast.Enabled = true;
}
...
}
}
}
//此代码参照:http://www.cnblogs.com/jecray/archive/2007/08/16/851419.html
此代码使用了anthem控件来支持无刷,不过,去掉所有的anthim能正确工作。但gridview控件会产生大量的viewstate代码,如果只做展示,则不需要这些东西。能不能去掉viewstate呢?
尝试直接改变这个gridview的viewstate,不能正确工作。
尝试更变的代码如下:
//初始化GridView参数
protected override void OnLoad(EventArgs e)
{
this.AllowPaging = true;
this.PagerSettings.Visible = true;
base.OnLoad(e);
//初始化GridView参数
base.EnableViewState = false;//禁用viewstate,禁用后,其提交按钮无法使用!!!!!??????
}
禁用viewstate后,点“下一页”、“上一页”等按钮再也没有反应。为什么?如何解决?