0

Je souhaite afficher une liste sur un site .aspx. Par conséquent, je dois utiliser le modèle d'objet client SP.Sharepoint: liaison GridView avec la liste SharePoint (modèle objet client)

J'ai trouvé le tutoriel suivant, mais cela ne pas utiliser les bibliothèques clientes: http://social.technet.microsoft.com/wiki/contents/articles/30287.binding-gridview-with-sharepoint-list.aspx

Mon code afin ressemble bien les éléments suivants:

ClientContext clientContext = GetContext(accessToken); 

Web web = clientContext.Web; 
clientContext.Load(web); 
clientContext.ExecuteQuery(); 

// Get the email input list. 
List inboxList = web.Lists.GetByTitle("InboxList"); 
Microsoft.SharePoint.Client.ListItemCollection items = inboxList.GetItems(new CamlQuery()); 

clientContext.Load(inboxList); 
clientContext.Load(items, ic => ic.Include(i => i["DisplayName"], i => i["Client_Title"], i => i["HasUniqueRoleAssignments"])); 
clientContext.ExecuteQuery(); 



foreach (Microsoft.SharePoint.Client.ListItem i in items) 
{ 
    clientContext.Load(i); 
} 

clientContext.ExecuteQuery(); 
oGrid.DataSource = items; 
oGrid.DataBind(); 

Mais cela montre que certains « méta-données » de la collection d'élément de liste, voir capture d'écran: enter image description here

Si je oGrid.DataSource = inboxList; je reçois un InvalidOperationException parce que la source de données pas le type de IListSource, IEnumerable ni IDataSource.

Si j'utilise oGrid.DataSource = inboxList.DataSource; je reçois un PropertyOrFieldNotInitializedException, mais je ne sais pas comment charger cet attribut (via clientContext.Load cela n'a pas fonctionné) ?!

Répondre

0

Je l'ai - fonctionne avec le code suivant:

protected void Page_Load(object sender, EventArgs e) 
{ 
     ... 
      ClientContext clientContext = GetContext(accessToken); 

      Web web = clientContext.Web; 
      clientContext.Load(web); 
      clientContext.ExecuteQuery(); 

      // Get the email input list. 
      List inboxList = web.Lists.GetByTitle("InboxList"); 
      Microsoft.SharePoint.Client.ListItemCollection items = inboxList.GetItems(new CamlQuery()); 

      clientContext.Load(inboxList); 
      clientContext.Load(items); 
      clientContext.ExecuteQuery(); 

      foreach (Microsoft.SharePoint.Client.ListItem i in items) 
      { 
       clientContext.Load(i); 
      } 
      clientContext.ExecuteQuery(); 

      oGrid.DataSource = GetInboxListData(inboxList, items); 
      oGrid.DataBind(); 

     } 
     else if (!IsPostBack) 
     { 
      Response.Write("Could not find a context token."); 
      return; 
     } 
    } 

    private DataTable GetInboxListData(List inboxList, Microsoft.SharePoint.Client.ListItemCollection items) 
    { 
     DataTable dt = new DataTable(); 

     dt.Columns.Add("From"); 
     dt.Columns.Add("To"); 
     dt.Columns.Add("Subject"); 
     dt.Columns.Add("Body"); 
     dt.Columns.Add("Attachments"); 
     dt.Columns.Add("Sent"); 

     DataRow row; 

     foreach(Microsoft.SharePoint.Client.ListItem item in items) 
     { 
      row = dt.Rows.Add(); 
      row["From"] = item["From1"].ToString(); 
      row["To"] = item["To"].ToString(); 
      row["Subject"] = item["Subject1"].ToString(); 
      row["Body"] = item["Body1"].ToString(); 
      row["Attachments"] = item["Attachments"].ToString(); 
      row["Sent"] = item["Sent"].ToString(); 
     } 
     return dt; 
    } 

Ceci est similaire à Retrieve the values from a list to Gridview in SharePoint Webpart? mais avec des méthodes de modèle objet client & objets.