【问题标题】:Sharepoint: Binding GridView with SharePoint List (Client Object Model)Sharepoint:将 GridView 与 SharePoint 列表绑定(客户端对象模型)
【发布时间】:2016-04-28 21:01:48
【问题描述】:

我想在 .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 不起作用)?!

【问题讨论】:

    标签: asp.net gridview sharepoint sharepoint-clientobject


    【解决方案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;
        }
    

    这类似于Retrieve the values from a list to Gridview in SharePoint Webpart?,但具有客户端对象模型方法和对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-04
      • 1970-01-01
      相关资源
      最近更新 更多