高分求教怎样在用户控件中调用它的宿主页面上的其他控件的方法?

Jiazi840207 2005-07-12 07:15:50
title:怎样在用户控件中调用它的宿主页面上的其他控件的方法?

content:我自己做了一个为DataGrid翻页的控件,可以提供对一个注册在其中的datagrid进行“前一页,后一页,首页,尾页”的翻页功能,但是,我把创建好的Datagrid对象的非空引用传进该控件,等翻页时确发生“对象引用为空”的异常,请问应该怎么解决? 多谢。
...全文
211 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
tmfc 2005-07-12
  • 打赏
  • 举报
回复
在宿主页面中你是如何对用户控件的DataGrid传给它的,每次pageload都要传哦,不然应该就会丢掉的。
Jiazi840207 2005-07-12
  • 打赏
  • 举报
回复
那请问为什么将这个用户控件的宿主页面的DataGrid传给它,之后就失去了对这个DataGrid的引用?
  • 打赏
  • 举报
回复
用一个继承Page类的PageBase加载用户控件,然后在PageBase里面定义虚方法,该方法给用户控件调用,同时,在你的宿主页面上基础PageBase,Override这些虚方法。那么用户控件这个时候调用的方法就相当于直接调用了宿主页面上你重载的方法。
Jiazi840207 2005-07-12
  • 打赏
  • 举报
回复
相关代码如下:
<%@ Control Language="c#" AutoEventWireup="false" Codebehind="DataGridPager.ascx.cs" Inherits="hanlin.program.Components.DataGridPager" TargetSchema="http://schemas.microsoft.com/intellisense/ie5"%>
<asp:label id="Label1" runat="server">共</asp:label><asp:label id="pagecount" runat="server">Label</asp:label><asp:label id="Label3" runat="server">页</asp:label><FONT face="宋体"> </FONT>
<asp:label id="Label4" runat="server">第</asp:label><asp:label id="curpage" runat="server">Label</asp:label><asp:label id="Label7" runat="server">页</asp:label><FONT face="宋体"> </FONT>
<asp:linkbutton id="first" runat="server" CommandArgument="0">首页</asp:linkbutton><FONT face="宋体"> </FONT>
<asp:linkbutton id="prev" runat="server" CommandArgument="prev">前一页</asp:linkbutton><FONT face="宋体"> </FONT>
<asp:linkbutton id="next" runat="server" CommandArgument="next">后一页</asp:linkbutton><FONT face="宋体"> </FONT>
<asp:linkbutton id="last" runat="server" CommandArgument="last">尾页</asp:linkbutton><FONT face="宋体">  </FONT>
<asp:dropdownlist id="ddlpagesizes" runat="server"></asp:dropdownlist><asp:label id="Label11" runat="server">行每页</asp:label>



namespace hanlin.program.Components
{
using System;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
//using System.Web.UI.WebControls;

/// <summary>
/// DataGridPager 的摘要说明。
/// </summary>
public class DataGridPager : System.Web.UI.UserControl
{
protected System.Web.UI.WebControls.Label Label1;
protected System.Web.UI.WebControls.Label Label3;
protected System.Web.UI.WebControls.Label Label4;
protected System.Web.UI.WebControls.Label Label7;
protected System.Web.UI.WebControls.Label pagecount;
protected System.Web.UI.WebControls.Label curpage;
protected System.Web.UI.WebControls.Label Label11;
protected System.Web.UI.WebControls.LinkButton first;
protected System.Web.UI.WebControls.LinkButton prev;
protected System.Web.UI.WebControls.DropDownList ddlpagesizes;
protected System.Web.UI.WebControls.LinkButton next;
protected System.Web.UI.WebControls.LinkButton last;
protected DataGrid dg=null;
protected Type type;
private void Page_Load(object sender, System.EventArgs e)
{

// 在此处放置用户代码以初始化页面
}


public DataGrid dataGrid
{//datagrid 的pagesize 和 datasource必须被设定并且datagrid绑定数据后(这样rowCount才可以为正数),才可以调用此属性设定dg
get
{
return dg;
}
set
{
if(value==null)throw new ArgumentException ("Argument cannot be null ","dg");
else
{
dg=value;
int i=0;
for(i=0;i<dg.Items.Count ;i++)

ddlpagesizes.Items.Add ((i+1).ToString());

}
}
}




#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}

/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器
/// 修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.first.Click += new System.EventHandler(this.prev_Click);
this.prev.Click += new System.EventHandler(this.prev_Click);
this.next.Click += new System.EventHandler(this.prev_Click);
this.last.Click += new System.EventHandler(this.prev_Click);
this.ddlpagesizes.SelectedIndexChanged += new System.EventHandler(this.ddlpagesizes_SelectedIndexChanged);
this.Load += new System.EventHandler(this.Page_Load);

}
#endregion

private void prev_Click(object sender, System.EventArgs e)
{
string arg = ((LinkButton)sender).CommandArgument.ToString();
switch(arg)
{
case "next"://下一页
if (dg.CurrentPageIndex < (dg.PageCount - 1))
{
dg.CurrentPageIndex += 1;

}
break;
case "prev"://前一页
if (dg.CurrentPageIndex > 0)
{
dg.CurrentPageIndex -= 1;

}
break;
case "last"://尾页
dg.CurrentPageIndex = (dg.PageCount - 1);
break;
default:
dg.CurrentPageIndex = 0;//首页
break;
}
curpage.Text =(dg.CurrentPageIndex+1).ToString () ;//currentpageindex starts from 0
}

private void ddlpagesizes_SelectedIndexChanged(object sender, System.EventArgs e)
{
int i=dg.PageSize ,j=0;
j=i*(dg.CurrentPageIndex +1);//第一页到当前页的行的总数

dg.PageSize =System.Int32.Parse (ddlpagesizes.SelectedValue );
pagecount.Text =(dg.Items.Count / dg.PageSize +1).ToString();//新的也总数
curpage.Text =(j/dg.PageSize +1).ToString();//新的当前页码
//需要重新绑定数据
dg.DataBind ();
}
}
}

zhilunchen 2005-07-12
  • 打赏
  • 举报
回复
无法啊,我上次问过,最终还是没有解决!
tmfc 2005-07-12
  • 打赏
  • 举报
回复
给出点代码吧,这样不好回答阿。

62,243

社区成员

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

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

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

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