我从别人那里拷了一份分页显示的东西,拿到我的服务器上,就提示错误信息,如下:
未将对象引用设置到对象的实例。 
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。源错误: 执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。  堆栈跟踪: 
[NullReferenceException: 未将对象引用设置到对象的实例。]
   dfky.PageControl.lAfter_Click(Object sender, EventArgs e)
   System.Web.UI.WebControls.LinkButton.OnClick(EventArgs e) +108
   System.Web.UI.WebControls.LinkButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +57
   System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +18
   System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +138
   System.Web.UI.Page.ProcessRequestMain() +1292 
--------------------------------------------------------------------------------
版本信息: Microsoft .NET Framework 版本:1.1.4322.2032; ASP.NET 版本:1.1.4322.2032 分页显示的代码如下:    public class PageControl : WebControl, INamingContainer
    {
        private int allcount = 0;
        private int CurrentIndex;
        private DropDownList drpPageNum;
        private System.Web.UI.WebControls.DataGrid grid;
        private LinkButton lAfter;
        private Table layout;
        private LinkButton lBefore;
        private LinkButton lFirst;
        private LinkButton lGo;
        private LinkButton lLast;        public event EventHandler SearchButton_Click;        public void Clear()
        {
            if (this.grid != null)
            {
                this.grid.CurrentPageIndex = 0;
            }
            if (this.drpPageNum != null)
            {
                this.drpPageNum.SelectedValue = "0";
            }
        }        protected override void CreateChildControls()
        {
            base.CreateChildControls();
            this.lFirst = new LinkButton();
            this.lFirst.CssClass = "LinkButton";
            this.lFirst.Font.Underline = false;
            this.lFirst.Text = "&nbsp;<font face='webdings'>9<font>&nbsp;";
            this.lFirst.Click += new EventHandler(this.lFirst_Click);
            this.lBefore = new LinkButton();
            this.lBefore.CssClass = "LinkButton";
            this.lBefore.Font.Underline = false;
            this.lBefore.Text = "&nbsp;<font face='webdings'>7<font>&nbsp;";
            this.lBefore.Click += new EventHandler(this.lBefore_Click);
            this.lAfter = new LinkButton();
            this.lAfter.CssClass = "LinkButton";
            this.lAfter.Font.Underline = false;
            this.lAfter.Text = "&nbsp;<font face='webdings'>8<font>&nbsp;";
            this.lAfter.Click += new EventHandler(this.lAfter_Click);
            this.lLast = new LinkButton();
            this.lLast.CssClass = "LinkButton";
            this.lLast.Font.Underline = false;
            this.lLast.Text = "&nbsp;<font face='webdings'>:<font>&nbsp;";
            this.lLast.Click += new EventHandler(this.lLast_Click);
            this.lGo = new LinkButton();
            this.lGo.Text = "Go";
            this.lGo.CssClass = "LinkButton";
            this.lGo.Click += new EventHandler(this.lGo_Click);
            this.drpPageNum = new DropDownList();
            this.drpPageNum.Width = 50;
            this.layout = new Table();
            this.layout.CellPadding = 0;
            this.layout.CellSpacing = 3;
            this.layout.BorderWidth = 0;
            this.layout.Rows.Add(new TableRow());
            this.layout.Rows[0].Cells.Add(new TableCell());
            this.layout.Rows[0].Cells.Add(new TableCell());
            this.layout.Rows[0].Cells.Add(new TableCell());
            this.layout.Rows[0].Cells.Add(new TableCell());
            this.layout.Rows[0].Cells.Add(new TableCell());
            this.layout.Rows[0].Cells.Add(new TableCell());
            this.layout.Rows[0].Cells.Add(new TableCell());
            this.layout.Rows[0].Cells[0].Controls.Add(this.lFirst);
            this.layout.Rows[0].Cells[1].Controls.Add(this.lBefore);
            this.layout.Rows[0].Cells[2].Controls.Add(this.lAfter);
            this.layout.Rows[0].Cells[3].Controls.Add(this.lLast);
            this.layout.Rows[0].Cells[4].Controls.Add(this.drpPageNum);
            this.layout.Rows[0].Cells[5].Controls.Add(this.lGo);
            this.Controls.Add(this.layout);
        }        private void grid_PageIndexChanged(int PageIndex)
        {
            this.grid.CurrentPageIndex = PageIndex;
            this.grid.DataBind();
        }        private void lAfter_Click(object sender, EventArgs e)
        {
            if (this.SearchButton_Click != null)
            {
                this.SearchButton_Click(this, EventArgs.Empty);
            }
            if (this.CurrentIndex < (this.grid.PageCount - 1))
            {
                this.grid_PageIndexChanged(this.CurrentIndex + 1);
            }
        }        private void lBefore_Click(object sender, EventArgs e)
        {
            if (this.SearchButton_Click != null)
            {
                this.SearchButton_Click(this, EventArgs.Empty);
            }
            if (this.CurrentIndex > 0)
            {
                this.grid_PageIndexChanged(this.CurrentIndex - 1);
            }
        }        private void lFirst_Click(object sender, EventArgs e)
        {
            if (this.SearchButton_Click != null)
            {
                this.SearchButton_Click(this, EventArgs.Empty);
            }
            this.grid_PageIndexChanged(0);
        }        private void lGo_Click(object sender, EventArgs e)
        {
            if (this.SearchButton_Click != null)
            {
                this.SearchButton_Click(this, EventArgs.Empty);
            }
            this.grid_PageIndexChanged(Convert.ToInt16(this.drpPageNum.SelectedValue) - 1);
        }        private void lLast_Click(object sender, EventArgs e)
        {
            if (this.SearchButton_Click != null)
            {
                this.SearchButton_Click(this, EventArgs.Empty);
            }
            this.grid_PageIndexChanged(this.grid.PageCount - 1);
        }        protected override void OnPreRender(EventArgs e)
        {
            base.OnPreRender(e);
            if (this.grid != null)
            {
                this.EnsureChildControls();
                this.layout.Height = this.Height;
                this.lFirst.Enabled = this.Enabled;
                this.lBefore.Enabled = this.Enabled;
                this.lAfter.Enabled = this.Enabled;
                this.lLast.Enabled = this.Enabled;
                this.lGo.Enabled = this.Enabled;
                this.drpPageNum.Enabled = this.Enabled;
                this.drpPageNum.Items.Clear();
                for (int i = 1; i <= this.grid.PageCount; i++)
                {
                    this.drpPageNum.Items.Add(i.ToString());
                }
                if (this.grid.Items.Count > 0)
                {
                    this.drpPageNum.SelectedValue = (this.grid.CurrentPageIndex + 1).ToString();
                }
                else
                {
                    this.drpPageNum.SelectedValue = "1";
                }
                this.layout.Rows[0].Cells[6].Text = "共" + this.grid.PageCount.ToString() + "页 共" + this.allcount.ToString() + "条记录";
            }
        }        public int AllCount
        {
            set
            {
                this.allcount = value;
            }
        }        public System.Web.UI.WebControls.DataGrid DataGrid
        {
            set
            {
                this.grid = value;
                this.CurrentIndex = this.grid.CurrentPageIndex;
            }
        }
    }
}

解决方案 »

  1.   

    这个分页显示的代码原理是:
    从数据库中读出数据后,放入this.layout这个table中,根据每页显示20条记录的规则列出当前的表项。
    然后有六个控件实现分页,分别是:
             private LinkButton lFirst; 
            private LinkButton lBefore; 
             private LinkButton lAfter; 
            private LinkButton lLast; 
            private DropDownList drpPageNum; 
            private LinkButton lGo; 
    现在的情况是,点击每一个按钮,都会出现错误提示,每次都是在按钮处理的代码上。不晓得是怎么回事,头疼死了。
    请大家帮忙解决一下!!
      

  2.   

    自己试着找了一下,判断是这个函数中的问题:
            private void grid_PageIndexChanged(int PageIndex) 
            { 
                this.grid.CurrentPageIndex = PageIndex; 
                this.grid.DataBind(); 
            } 
    里面的grid在点击导航按钮后变成空了。
    请问怎么解决呢?这个函数是通过上一级页面嵌套的,代码如下:
    <%@ Page language="c#" Codebehind="DeviceSearch.aspx.cs" AutoEventWireup="false" Inherits="infoMange.web.DeviceSearch" validateRequest="false"%>
    <%@ Register TagPrefix="cc1" Namespace="xxxx" Assembly="PageControl" %>grid在A页面被赋值,上面的函数生成导航条。当点击导航条后,grid就成空了。请高手帮帮忙。
      

  3.   

    自己找到答案了。是通过设置断点逐步查找到的。
    就是grid的数据为空。
    我又查找了上级调用页面的代码,原来问题是出在page.isPostBack的判断上。一个页面第一次显示的时候 isPostBack=false 在这个页面上点击按钮或其它东西提交的时候, isPostBack=true 一般这个判断是指第一次打开这个页面的时候要做的事. 
    一般做一些初始化什么的东西. 我的绑定语句写到这里了:if(!Page.IsPostBack)
    {
    bindgrid();//
    }
    我把bindgrid写到判断语句的外面,结果就正常了。谢谢大家。