Heute möchte ich eine neue Blogserie beginnen, welche sich um das SPGridView dreht. Das SPGridView ist ein Control welches eine eine Listendarstellung ermöglicht, die sehr nah an die Standard-Listenwebparts von SharePoint herankommt. Leider hat es ein paar Tücken, wenn man die Möglichkeiten des Standards nutzen möchte. So ist es zwar einfach Filtern, Sortieren und Paging zu implementieren, möchten Sie jedoch, dass diese genauso wie der Standard funktionieren dann müssen Sie einige Stellen anpassen. Diese Möglichkeiten möchte ich in weiteren Artikeln ansprechen. Heute möchte ich über den grundsätzlichen Aufbau eines SPGRidViews reden um eine Basis zu schaffen.

Ich habe mein SPGridview in einem Visuellen Webpart gebaut. Dazu habe ich im ascx ein SPGridView, eine ObjectDataSource (für das Filtern und Suchen nötig) und einen SPGridViewPager abgelegt.

<SharePoint:SPGridView Runat="server" id="spgridLastModDocs" AutoGenerateColumns="false" DataSourceID="OdsDataSourceDocuments" FilteredDataSourcePropertyName="FilterExpression"/> 
<SharePoint:SPGridViewPager runat="server" ID="GvDocumtensPager" GridViewId="spgridLastModDocs" />
<asp:ObjectDataSource runat="server" id="OdsDataSourceDocuments" SelectMethod="InitializeDataTable" OnSelecting="OdsDataSourceDocuments_Selecting" OnSelected="OdsDataSourceDocuments_Selected" EnableCaching="False" TypeName="HanseVision.Hpa.Cockpit.LastModifiedDocumentsWebPart.LastModifiedDocumentsWebPartUserControl, HanseVision.Hpa.Cockpit, Version=1.0.0.0, Culture=neutral, PublicKeyToken=11e99323d9a1fb04" />

Sehr wichtig ist hierbei die Eigenschaft EnableViewState, die auf false zu setzen ist. Tut man dies nicht, werden zwar alle Daten bei Erstaufruf korrekt dargestellt aber es entsteht ein inkorrektes Verhalten bei Postbackoperation wie Sortieren, Paging und Filtern. Für die DataSource werden zu der SelectMethod auch nich die Events OnSelected und OnSelecting angesprochen. Dies wird für die SelectMethod benötigt, wenn man Parameter in der SelectMethod nutzen möchte.

 

spgridLastModDocs.EnableViewState = false;

Anschließend erstellt man in der CreateChildControls-Methode die Spalten des SPGridViews. Dies geschieht über SPBoundFields, BoundFields, HyperLinkFields oder TemplateFields. Hier ein Beispiel für die Spalte DocumentIcon welche in keinem Dokumentenwebpart fehlen sollte.

boundField = new BoundField() { HeaderText = "Typ", DataField = Constants.DataFieldDocIconUrl, HtmlEncode = false };
boundField.HeaderStyle.HorizontalAlign = HorizontalAlign.Center;
boundField.ItemStyle.Wrap = false;
boundField.ItemStyle.HorizontalAlign = HorizontalAlign.Center;
boundField.ItemStyle.Width = Unit.Pixel(35);
boundField.HeaderStyle.Width = Unit.Pixel(35);
boundField.SortExpression = Constants.DataFieldExtension;
spgridLastModDocs.Columns.Add(boundField);

Wie vorhin erwähnt kann man mittels OnSelecting und OnSelected Parameter in die SelectMethod übergeben bzw. diese auch wieder auslesen. Dies habe ich für einen Variable getan mit der in die Dauer der Abfrage gemessen habe.

protected void OdsDataSourceDocuments_Selecting(object sender, ObjectDataSourceMethodEventArgs e)
{
    e.InputParameters.Add(searchTimeString, 0);
}

Die SelectMethod:

public DataTable InitializeDataTable(out int searchTime, int elementLimit)
{
…
}

Das Auslesen des Parameters:

protected void OdsDataSourceDocuments_Selected(object sender, ObjectDataSourceStatusEventArgs e)
{
   DocumentsDurationLabel.Text = "Time searching documents: " + e.OutputParameters[searchTimeString].ToString() + "ms";
}

Dies war das grundsätzliche Erstellen eines SPGridView. In weiteren Teilen dieser Serie wird das Filtern und Sortieren des SPGRidViews angesprochen.

Leave a comment

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Time limit is exhausted. Please reload the CAPTCHA.