2012-03-01 57 views
0

这是我的第一个共享点项目,eveything看起来很混乱。使用SPGridViewPager时未将对象引用设置为对象的实例

我需要一个带分页功能的SPGridView。

这里是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; 


     } 
    } 
} 

,直到我说这个代码一切工作(除了分页:

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

          this.Controls.Add(pager); 

之后,我得到的Render方法异常这里:

   base.Render(writer); 

堆栈跟踪是:

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 2012-03-01 23:35:38

+0

感谢@EtherDragon的评论。我发现了另一个解决方案:http://mossindepth.blogspot.com/2009/05/spgridview-grouping-is-it-easy-to-apply.html,它的工作方式应该如何 – user278618 2012-03-04 19:14:07

回答

0

您必须为_grid设置ID。 例如,_grid.ID = "_gridView";

相关问题