SharePointCommunity
Die deutschsprachige Community für SharePoint, Microsoft 365, Teams, Yammer und mit Azure

Sponsored by

Willkommen im Forum Archiv.
Einträge sind hier nicht mehr möglich, aber der Bestand von 12 Jahren SharePoint-Wissen ist hier recherchierbar.




UserValues in SPGridView

Geprüfte Antwort Dieser Beitrag hat 7 Antworten

Ohne Rang
1714 Beiträge
C.Kaiser erstellt 2 Dez. 2010 16:37
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo zusammen,

ich hab ein Grid, welches Daten aus einer Sharepoint Liste zieht. In der Liste gibt es ein MultiValue User Field, welches ebenfalls im Grid angezeigt wird,

Als string bekomme ich die Daten problemlos angezeigt, aber sobald mehr als ein User im Sharepoint Feld angelegt wird ist die Ausgabe = user1;#123#;user2. -> Logisch da Sharepoint die Daten so anliefert.

Ich würde jetzt aber gerne die Daten "richtig" anzeigen lassen, nämlich als Link zum entsprechenden Userprofil, wie mans auch aus Ansichten usw. kennt.

Muss ich mir den Link selbst zusammenbasteln oder gibts einen eleganteren Weg?

Danke!

Alle Antworten

Ohne Rang
634 Beiträge
Olaf Didszun Als Antwort am 2 Dez. 2010 17:21
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Für die Spalte im Grid wirst Du vermutlich ein eigenes Template anlegen müssen. Hier kannst Du immer dann, wenn eine Zeile angeliefert wird die Formatierung vornehmen. Um dann einen "vernünftigen" Wert für die Ausgabe zu bekommen, schau Dir die Klasse SPFieldUserValue an. Die kannst Du als Parameter für SPFieldUser.GetFieldValueAsHtml() verwenden.

Grüße

Olaf

 

Ohne Rang
1714 Beiträge
C.Kaiser Als Antwort am 2 Dez. 2010 21:58
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo Olaf,

in die gleiche Richtung gingen meine Gedanken auch. Nun bin ich allerdings wieder an einem Punkt, dass ich beim letzten Mal schon nicht lösen konnte. Ich bekomme den Fehler: "Operation is not valid due to the current state of the object"

Das letzte Mal hab ich als Workarround ein Webpart gebaut und der Webseite sämtliche Arbeit bzgl Daten laden usw. machen lasse. Dieses Mal muss ich allerdings bei meiner Custom-aspx-Page bleiben. Ein Webpart wäre zu komplex und ich hab dazu nicht genug Zeit.

Beste Grüße,
Christian

http://www.sharepoint-rhein-ruhr.de

Ohne Rang
634 Beiträge
Olaf Didszun Als Antwort am 2 Dez. 2010 23:19
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Leider bin ich zu wenig ASP.NET-Entwickler, als das ich so richtig weiterhelfen kann. Aber aus meiner Erfahrung ist doch ein Webpart auch "nur ein Control". Das sollte sich doch auf einer aspx-Seite auch einbinden lassen.

Auf der anderen Seiten - wieder aus meiner leidigen Erfahrung - habe ich meine Templates in der CreateChildControls-Methode verwendet. Da habe ich dem SPGridView seine Spalten zugewiesen. Das müsste doch bei einer aspx-Seite auch gehen.

Grüße

Olaf

 

Ohne Rang
929 Beiträge
Thomas Östreich Als Antwort am 3 Dez. 2010 08:05
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Du kannst die URL auch von Hand formatieren, da die url eh immer statisch und relativ zur site ist.

_layouts/userdisp.aspx?ID={deineID}&Source={Url der aktuellen seite->Encoded}

Warum du aber den Fehler bekommst kann ich so nicht nachvollziehen. Kann es sein das du die Daten in RunWithElevatedRights holst und dann Später verarbeitest? Wenn ja kann das der Grund sein das SPWeb und SPSite nicht mehr gültig sind.

StackTrace wäre dabei interessant.

Ohne Rang
1714 Beiträge
C.Kaiser Als Antwort am 3 Dez. 2010 09:07
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Nein ich hole die Daten nicht per ElevatedPriviledges. Ich hole mir die Daten über eine CAML-Query auf eine Liste. Das DataTable der zurückgegebenen Item-Collection weise ich dem Grid zu. Das ganze passiert in einem EventHandler (Button Click), weil es eine Art Suchwebseite ist.

In der aspx-Page verwende ich dann die Columns, ca. so:
<SharePoint:SPGridView ID="grid" runat="server" AutoGenerateColumns="false" RowStyle-BackColor="#DDDDDD" AlternatingRowStyle-                  BackColor="#EEEEEE" AllowSorting="true">
                    <Columns>
                             <asp:HyperLinkField DataTextField="Title" HeaderText="Produkt" DataNavigateUrlFields="LinkUrl" NavigateUrl="" />
                              <asp:BoundField DataField="Produktsegment" HeaderText="Produktsegment" SortExpression="Produktsegment" />
                               .......
                    </Columns>
</SharePoint:GridView>

Stack-Trace:
[InvalidOperationException: Operation is not valid due to the current state of the object.]
   Microsoft.SharePoint.SPFolder.get_ContentTypeOrder() +490
   Microsoft.SharePoint.SPContext.get_ContentTypes() +900
   Microsoft.SharePoint.SPContext.get_ContentType() +472
   Microsoft.SharePoint.SPContext.get_Fields() +270
   Microsoft.SharePoint.WebControls.FormComponent.get_Fields() +44
   Microsoft.SharePoint.WebControls.FieldMetadata.get_Field() +417
   Microsoft.SharePoint.WebControls.BaseFieldControl.get_Visible() +88
   System.Web.UI.Control.PreRenderRecursiveInternal() +18
   System.Web.UI.Control.PreRenderRecursiveInternal() +171
   System.Web.UI.Control.PreRenderRecursiveInternal() +171
   System.Web.UI.Control.AddedControl(Control control, Int32 index) +8681381
   System.Web.UI.ControlCollection.Add(Control child) +80
   System.Web.UI.WebControls.RowControlCollection.Add(Control child) +43
   System.Web.UI.ControlCollection.AddAt(Int32 index, Control child) +33
   System.Web.UI.WebControls.RowControlCollection.AddAt(Int32 index, Control child) +48
   System.Web.UI.WebControls.TableRowCollection.AddAt(Int32 index, TableRow row) +33
   System.Web.UI.WebControls.TableRowCollection.Add(TableRow row) +16
   System.Web.UI.WebControls.GridView.CreateRow(Int32 rowIndex, Int32 dataSourceIndex, DataControlRowType rowType, DataControlRowState rowState, Boolean dataBind, Object dataItem, DataControlField[] fields, TableRowCollection rows, PagedDataSource pagedDataSource) +137
   System.Web.UI.WebControls.GridView.CreateChildControls(IEnumerable dataSource, Boolean dataBinding) +2417
   Microsoft.SharePoint.WebControls.SPGridView.CreateChildControls(IEnumerable dataSource, Boolean dataBinding) +187
   System.Web.UI.WebControls.CompositeDataBoundControl.PerformDataBinding(IEnumerable data) +57
   System.Web.UI.WebControls.GridView.PerformDataBinding(IEnumerable data) +14
   System.Web.UI.WebControls.DataBoundControl.OnDataSourceViewSelectCallback(IEnumerable data) +114
   System.Web.UI.DataSourceView.Select(DataSourceSelectArguments arguments, DataSourceViewSelectCallback callback) +31
   System.Web.UI.WebControls.DataBoundControl.PerformSelect() +142
   System.Web.UI.WebControls.BaseDataBoundControl.DataBind() +73
   System.Web.UI.WebControls.GridView.DataBind() +4

 

Beste Grüße,
Christian

http://www.sharepoint-rhein-ruhr.de

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 3 Dez. 2010 09:57
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Benutzt Du irgendwo die SPGridView.DataKeys-Eigenschaft um später auf den Primärschlüssel der Daten zugreifen zu können? Damit hatte ich mal ein Problem, weil das SPGridView irgendwie nicht damit klarkommt. Ich weiß die Zusammenhänge nicht mehr genau, aber es resultierte in derselben Fehlermeldung.

Ich habe mir dann beholfen, indem ich den Key in ein HiddenField in einer Spalte geschrieben und von dort wieder geholt habe.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
1714 Beiträge
C.Kaiser Als Antwort am 3 Dez. 2010 09:57
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Anmerkung zu oben:
Das TemplateField hat mir irgendwie den Fehler reingebracht...

Ich habs jetzt auf ein asp:BoundField mit htmlEncode=false & htmlformatstringencode=false gestellt und dann funktionierts so wie ichs haben will.

Danke!

Beste Grüße,
Christian

http://www.sharepoint-rhein-ruhr.de