logo

Wyświetlanie wielu SPGridView na jednej stronie/WebParcie

Ostatnio, podczas przeglądania stron o tematyce SharePoint’a, natknąłem się na kilka postów o SPGridView. Dotyczyły one problemu sortowania i filtrowania po dodaniu kilku tych kontrolek na jedną stronę lub do jednego WebPart’a. Zdziwiło mnie to, ponieważ w projekcie, który aktualnie kończę, mam WebPart, w którym znajduje się 7 SPGridView, które na dodatek ukrywam za pomocą JavaScript’u. Mam też plik aspx, w którym znajdują się dwie kontrolki tego typu i z nimi również nie mam żadnych problemów. Oczywiście każdy ‚grid’ ma swój własny statyczny obiekt DataSource, z którego dostaje obiekt DataTable.

Przykładowy SPGridView z ObjectDataSource wygląda następująco;

  1. ObjectDataSource odsDataSourceActual = new ObjectDataSource(  
  2. "WebCon.Solutions.ELearning.WebParts.ExampleObjectDataSourceActual2 , WebCon.Solutions.ELearning.WebParts, Culture=neutral, Version=1.0.0.0, PublicKeyToken=c30f1f18c194ceba",  
  3. "GetDataTable");  
  4.                         odsDataSourceActual.TypeName = typeof(WebCon.Solutions.ELearning.WebParts.ExampleObjectDataSourceActual2).AssemblyQualifiedName;  
  5.             odsDataSourceActual.ID = "ExampleSourceActual";  
  6.   
  7.             HttpRequest reqActual = HttpContext.Current.Request;  
  8.             if (reqActual.Form["__CALLBACKID"] == null ||  
  9.               reqActual.Form["__CALLBACKPARAM"] == null ||  
  10.               !reqActual.Form["__CALLBACKID"].EndsWith("ExampleGridActual"))  
  11.             {  
  12.                 if (ViewState["FilterExpression"] != null)  
  13.                     odsDataSourceActual.FilterExpression = (string)ViewState["FilterExpression"];  
  14.             }  
  15.   
  16.             this.Controls.Add(odsDataSourceActual);  
  17.   
  18.             gVActual = new SPGridView();  
  19.             gVActual.ID = "ExampleGridActual";  
  20.             gVActual.AutoGenerateColumns = false;  
  21.             TableItemStyle tis = gVActual.HeaderStyle;  
  22.             tis.ForeColor = System.Drawing.Color.DarkGray;  
  23.   
  24.             HyperLinkField colHyperLink = new HyperLinkField();  
  25.             colHyperLink.DataNavigateUrlFields = "LEA_ID".Split(‚,’);  
  26.             colHyperLink.DataTextField = "Title";  
  27.             colHyperLink.DataNavigateUrlFormatString = SPContext.Current.Web.Url + "/_layouts/WebCon/ELearningTest.aspx?learningID={0}";  
  28.             colHyperLink.HeaderText = "Nazwa";  
  29.             colHyperLink.SortExpression = "Title";  
  30.             gVActual.Columns.Add(colHyperLink);  
  31.   
  32.             BoundField EndDate = new BoundField();  
  33.             EndDate.DataField = "EndDate";  
  34.             EndDate.HeaderText = "Data do";  
  35.             EndDate.SortExpression = "EndDate";  
  36.             gVActual.Columns.Add(EndDate);  
  37.   
  38.             BoundField Points = new BoundField();  
  39.             Points.DataField = "Points";  
  40.             Points.HeaderText = "Uzyskane punkty";  
  41.             Points.SortExpression = "Points";  
  42.             gVActual.Columns.Add(Points);  
  43.   
  44.             BoundField LEA_ID = new BoundField();  
  45.             LEA_ID.DataField = "LEA_ID";  
  46.             LEA_ID.HeaderText = "LEAID";  
  47.             LEA_ID.SortExpression = "LEA_ID";  
  48.             gVActual.Columns.Add(LEA_ID);  
  49.   
  50.             gVActual.Columns[3].Visible = false;  
  51.             gVActual.AllowSorting = true;  
  52.             gVActual.AllowFiltering = true;  
  53.             gVActual.PageSize = 10;  
  54.             gVActual.AllowPaging = true;  
  55.             gVActual.FilterDataFields = "Title, EndDate, Send";  
  56.             gVActual.FilteredDataSourcePropertyName = "FilterExpression";  
  57.             gVActual.FilteredDataSourcePropertyFormat = "{1} = ’{0}’";  
  58.             gVActual.DataSourceID = "ExampleSourceActual";  
  59.             gVActual.EnableViewState = false;  
  60.             gVActual.PageIndexChanging += new GridViewPageEventHandler(gVActual_PageIndexChanging);  
  61.             this.Controls.Add(new LiteralControl("<div id=""divActual"">"));  
  62.             this.Controls.Add(gVActual);  
  63.             this.Controls.Add(new LiteralControl("</div>"));  
  64.             gVActual.PagerTemplate = null;  
  65.             gVActual.DataBind();  

  Sam ObjectDataSource ogranicza sie do kilku operacji i zwrócenia DataTable, więc nie ma sensu wrzucać jego kodu, ale oczywiscie przypominam, że każdy grid ma własny ODS. Ukrywanie polega na ustawianiu div’a zawierającego naszego ‚grida’ na display: none, przez JavaScript’ową funkcję.

W ten sposób na stronie znajduje się 7 kontrolek SPGridView i we wszystkich działa zarówno sortowanie, jak i filtrowanie.


Tomasz Rabiński - więcej informacji

Firma WebCon Solutions zajmuje się wdrożeniami, oraz dedykowanymi rozwiązaniami dla oprogramowania Windows SharePoint Services oraz Microsoft Office SharePoint Server.



  5 KOMENTARZY
OfficeSystem.pl
Loading Facebook Comments ...