2012-03-01 1 views
0

Это мой первый проект sharepoint, и eveything выглядит очень запутанным.Ссылка на объект не установлена ​​в экземпляр объекта при использовании SPGridViewPager

Мне нужно иметь SPGridView с пейджингом.

Вот весь код ого 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; 


     } 
    } 
} 

Все работает (кроме пейджинга, пока я не добавил этот код:

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

          this.Controls.Add(pager); 

После этого я получаю исключение о методе рендер здесь :

   base.Render(writer); 

StackTrace является:

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) 

Как исправить эту ошибку?

+1

Вещи стоит проверить: дважды проверьте, что CreateChildControls вызывается перед Render. Кроме того, что произойдет, если вы переместите base.CreateChildControls на ваш код. – EtherDragon

+0

Спасибо @EtherDragon за ваш комментарий. Я нашел другое решение: http: //mossindepth.blogspot.com/2009/05/spgridview-grouping-is-it-easy-to-apply.html, и он работает, как он должен – user278618

ответ

0

Вы должны установить ID для _grid. Например, _grid.ID = "_gridView";