Sharepoint: привязка GridView к списку SharePoint (клиентская объектная модель)

Я хочу показать список на сайте .aspx. Поэтому я должен использовать объектную модель клиента SP.

Я нашел следующий учебник, но он не использует клиентские библиотеки: http://social.technet.microsoft.com/wiki/contents/articles/30287.binding-gridview-with-sharepoint-list.aspx

Мой код пока выглядит следующим образом:

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();

Но это показывает только некоторые «метаданные» коллекции элементов списка, см. снимок экрана: введите здесь описание изображения

Если я использую oGrid.DataSource = inboxList;, я получаю InvalidOperationException, потому что источник данных не является типом IListSource, IEnumerable или IDataSource.

Если я использую oGrid.DataSource = inboxList.DataSource;, я получаю PropertyOrFieldNotInitializedException, но я не знаю, как загрузить этот атрибут (через clientContext.Load это не сработало)?!


person D. Müller    schedule 22.01.2016    source источник


Ответы (1)


Я понял - работает со следующим кодом:

 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;
    }

Это похоже на получение значений из списка в Gridview в веб-части SharePoint?, но с методами и объектами клиентской объектной модели.

person D. Müller    schedule 22.01.2016