简体   繁体   中英

Object reference not set to an instance of an object when using SPGridViewPager

It's my first sharepoint project and eveything looks very confusing.

I need to have a SPGridView with paging.

Here is an entire code of mx webpart:

using System;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using Microsoft.SharePoint;
using Microsoft.SharePoint.WebControls;

namespace FirstSPGridView.VisualWebPart1
{
    [ToolboxItemAttribute(false)]
    public class VisualWebPart1 : WebPart
    {
        // Visual Studio might automatically update this path when you change the Visual Web Part project item.
        private const string _ascxPath = @"~/_CONTROLTEMPLATES/FirstSPGridView/SPGridViewWebPartTest/VisualWebPart1UserControl.ascx";

        SPGridView _grid;

        protected override void CreateChildControls()
        {
            base.CreateChildControls();
            try
            {
                SPSite mySite = SPContext.Current.Site;
                SPWeb myWeb = mySite.OpenWeb();

                //Using RunWithElevatedPrivileges

                SPSecurity.RunWithElevatedPrivileges(delegate()
                {
                    using (SPSite siteCollection = new SPSite(mySite.ID))
                    {
                        using (SPWeb web = siteCollection.OpenWeb(myWeb.ID))
                        {
                            _grid = new SPGridView();
                            _grid.AutoGenerateColumns = false;


                            _grid.PageSize = 3;
                            _grid.AllowPaging = true;

                            _grid.DataSource = SelectData();


                            Controls.Add(_grid);

                            SPGridViewPager pager = new SPGridViewPager();
                            pager.GridViewId = _grid.ID;

                            this.Controls.Add(pager);

                        }
                    }
                });
            }
            catch (Exception ex)
            { }


        }

        protected sealed override void Render(HtmlTextWriter writer)
        {
            try
            {
                GenerateColumns();
                _grid.DataBind();
                base.Render(writer);
            }
            catch (Exception e)
            {
                throw new NotImplementedException();
            }
        }

        private void GenerateColumns()
        {
            BoundField clientNameColumn = new BoundField();
            clientNameColumn.HeaderText = "Client";
            clientNameColumn.DataField = "LastName";
            _grid.Columns.Add(clientNameColumn);

            BoundField birthDayColumn = new BoundField();
            birthDayColumn.HeaderText = "BirthDate";
            birthDayColumn.DataField = "BirthDate";

            _grid.Columns.Add(birthDayColumn);
        }


        public DataTable SelectData()
        {
            var dataGet = new DataTable();
            SPSecurity.RunWithElevatedPrivileges(delegate()
                                                     {
                                                         using (
                                                             var conn =
                                                                 new SqlConnection(
                                                                     "Data Source=localhost;Initial Catalog=AdventureWorksDW2008R2;Integrated Security=True")
                                                             )
                                                         {
                                                             var adapter = new SqlDataAdapter();
                                                             adapter.SelectCommand =
                                                                 new SqlCommand("Select TOP 100 LastName,Birthdate FROM DimCustomer");
                                                             adapter.SelectCommand.Connection = conn;
                                                             conn.Open();

                                                             adapter.Fill(dataGet);

                                                         }
                                                     });
            return dataGet;


        }
    }
}

Everything was working (except paging until I added this code:

SPGridViewPager pager = new SPGridViewPager();
                            pager.GridViewId = _grid.ID;

                            this.Controls.Add(pager);

After that I get an exception on the Render method here:

                base.Render(writer);

StackTrace is:

   at System.Web.UI.Control.FindControl(String id, Int32 pathOffset)\r\n   at Microsoft.SharePoint.WebControls.Menu.FindControlByWalking(Control namingContainer, String id)\r\n   at Microsoft.SharePoint.WebControls.SPGridViewPager.get_GridViewControl()\r\n   at Microsoft.SharePoint.WebControls.SPGridViewPager.Render(HtmlTextWriter output)\r\n   at System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children)\r\n   at System.Web.UI.WebControls.WebControl.RenderContents(HtmlTextWriter writer)\r\n   at System.Web.UI.WebControls.WebControl.Render(HtmlTextWriter writer)\r\n   at FirstSPGridView.VisualWebPart1.VisualWebPart1.Render(HtmlTextWriter writer)

How can I fix that error?

You must just set ID for _grid. For example, _grid.ID = "_gridView";

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM