控件的只读属性如何设置

一天到晚游泳的鱼2016 2009-12-12 08:09:51
一个分页控件的只读属性CurrentPageIndex
public int CurrentPageIndex
{
get
{
return (int)ViewState["CurrentPageIndex"];
}
}

如何咋控件内部给CurrentPageIndex赋值

我函数private void getPageIndex(int RecordCount, int PageCount)当中
private void getPageIndex(int RecordCount, int PageCount)
{
int pageIndex;
// 从Url参数获得当前页码
string queryIndex = HttpContext.Current.Request.QueryString["page"];

if (RecordCount == 0)
pageIndex= 1; // 如果记录数为0,则显示为第一页
省略部分代码。。。。。。。
ViewState["CurrentPageIndex"] = pageIndex;
}
在前台读取控件的CurrentPageIndex的属性时报错
说 return (int)ViewState["CurrentPageIndex"];
未将对象引用设置到对象的实例。
...全文
349 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
jintianhu2000 2009-12-13
  • 打赏
  • 举报
回复
在控件中,所有对外的属性都要存储在ViewState里,不然回传后都取不到值的
比如你的
public int PageCount

还有 你的 GetPageUrl(3)在哪?

我在我的帖子里都和你说了,你直接把代码发给我,我帮你改,你代码里可能有很多错误的地方,光这么一点点改不行的,我得全局的看一下你代码
jintianhu2000 2009-12-13
  • 打赏
  • 举报
回复
你已经写了属性了public int CurrentPageIndex
在外面赋值的时候就不要再多VIEWSTATE操作了
比如
ViewState["CurrentPageIndex"] = pageIndex;
应该写成、
CurrentPageIndex=pageIndex;
  • 打赏
  • 举报
回复
我这样设计有什么错误???把控件拉倒page页面---说前台界面说控件呈现错误,未将对象引用设置到对象的实例,然后运行 前台this.NetPager1.CurrentPageIndex不能取到值
[DefaultProperty("Text")]
[ToolboxData("<{0}:NetPager runat=server></{0}:NetPager>")]
public class NetPager : Control
{
private int _pageCount;
//private int _CurrentPageIndex;
[Bindable(true)]
[Browsable(false)]
//[ReadOnly(true)]
//[DesignOnly(true)]
[Category("Appearance")]
[DefaultValue("")]
[Localizable(true)]
[Description("记录集总数")]
public int RecordCount
{
get
{
return (int)ViewState["RecordCount"];
}

//set
//{
//ViewState["RecordCount"] = value;
//}
}
[Bindable(true)]
[Browsable(false)]
//[ReadOnly(true)]
//[DesignOnly(true)]
[Category("Appearance")]
[DefaultValue("")]
[Localizable(true)]
[Description("页总数")]
public int PageCount
{
get
{
return _pageCount;
}

set
{
_pageCount = value;
}
}
[Bindable(true)]
[Browsable(false)]
//[ReadOnly(true)]
//[DesignOnly(true)]
[Category("Appearance")]
//[DefaultValue("")]
[Localizable(true)]
[Description("当前页数")]
public int CurrentPageIndex
{
get
{
object obj2 = this.ViewState["CurrentPageIndex"];
if (obj2 != null)
{
return (int)obj2;
}
return 1;
}

set
{
ViewState["CurrentPageIndex"] = value;
}
}
// 从Url参数中获得但前页码
private void getPageIndex(int RecordCount, int PageCount)
{
int pageIndex;
// 从Url参数获得当前页码
string queryIndex = HttpContext.Current.Request.QueryString["page"];

if (RecordCount == 0)
pageIndex= 1; // 如果记录数为0,则显示为第一页

// 对页码进行一些校验
if (string.IsNullOrEmpty(queryIndex))
pageIndex = 1; // 显示第一页
else
{
try
{
pageIndex = Math.Abs(int.Parse(queryIndex));

if (pageIndex == 0)
pageIndex = 1;

// 如果当前页大于总页数,设当前页为最后一页
if (pageIndex > PageCount)
pageIndex = PageCount;
}
catch
{
pageIndex = 1; // 显示第一页
}
}

//return pageIndex;
ViewState["CurrentPageIndex"] = pageIndex;
}
protected override void Render(HtmlTextWriter output)
{
output.Write(RecordCount + "------" + _pageCount);
output.Write("</br>");
output.Write(GetPageUrl(3));
output.Write("</br>");
}
}
wuyq11 2009-12-12
  • 打赏
  • 举报
回复
public int PageIndex
{
get
{
if (this.ViewState["PageIndex"] == null)
{
this.ViewState["PageIndex"] = 1;
}
return Convert.ToInt32(this.ViewState["PageIndex"]);
}
set
{
this.ViewState["PageIndex"] = value;
}
}
wuyq11 2009-12-12
  • 打赏
  • 举报
回复
[Description("每页显示的纪录数"),DefaultValue("15")]
public virtual int PageSize
{
get
{
return _pageSize != 0 ? _pageSize : 15;
}
set
{
if (value == _pageSize)
return;

_pageSize = value;
if (value > 0)
{
PageCount = (RecordCount % value == 0 ? RecordCount / value : RecordCount / value + 1);//计算总页数
}

}
}

[Description("总纪录数"),DefaultValue("0")]
public virtual int RecordCount
{
get
{
EnsureChildControls();
return lbl_RecodeCount.Text.Trim() != "" ? int.Parse(lbl_RecodeCount.Text.Trim()) : 0;
}
set
{
if (value== RecordCount)
return;

EnsureChildControls();

lbl_RecodeCount.Text = value.ToString();
if (value > 0)
{
PageCount = (value % PageSize == 0 ? value / PageSize : value / PageSize + 1);//计算总页数
}

}
}
  • 打赏
  • 举报
回复
不是,
这个是分页控件的当前页码,是只读属性
public int CurrentPageIndex
{
get
{
return (int)ViewState["CurrentPageIndex"];
}
}
前台this.Pager1.CurrentPageIndex获取,要是数据库分页传这个当前页属性给后台就可以了。

但是控件设计,前台界面说控件呈现错误,未将对象引用设置到对象的实例。
koukoujiayi 2009-12-12
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 sandyxxx 的回复:]
为啥前台调用都返回0
我给他赋值了
ViewState["CurrentPageIndex"] =5

前台取不到值???
[/Quote]
你的意思是想在html文档中取ViewState["CurrentPageIndex"]???
如果是这样是取不到的!!

可以加一个隐藏域,将你的ViewState["CurrentPageIndex"]放到隐藏域中,然后在前台取!!
大致如下:
1.在前台加一个隐藏域:<input id="Hidden1" type="hidden" runat ="server"/>
2.后台C#:Hidden1.Value = ViewState["CurrentPageIndex"].ToString();
3.前台同过js获取Hidden1中的值
  • 打赏
  • 举报
回复
为啥前台调用都返回0
我给他赋值了
ViewState["CurrentPageIndex"] =5

前台取不到值???
koukoujiayi 2009-12-12
  • 打赏
  • 举报
回复
你的
return (int)ViewState["CurrentPageIndex"];

应该写成
return Convert.ToInt32(ViewState["CurrentPageIndex"]);

8,834

社区成员

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

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