将ListItemCollection绑定为DataGridView的DataSource

时间:2013-11-09 12:01:46

标签: c# sharepoint client-side

我正在使用SharePoint Server 2013.我正在尝试在Windows窗体应用程序(客户端应用程序)中的DataGridView中显示列表数据。我获得了与特定列表相关的ListItemCollection对象。如何将该对象映射到DataGridView

的数据源

我找不到从DataTable对象获取ListItemCollection对象的任何特定方法。因为我用来获取数据的列表是通过下拉列表选择的。因此,Datatable对象没有预定的列。提前致谢。 :)

2 个答案:

答案 0 :(得分:0)

尝试这个 -

        ListItemCollection items = GetListItemCollections(); //Get list item collection

        DataTable dt = new DataTable();

        foreach (var field in items[0].FieldValues.Keys)
        {
            dt.Columns.Add(field);
        }

        foreach (var item in items)
        {
            DataRow dr = dt.NewRow();

            foreach (var obj in item.FieldValues)
            {
                if (obj.Value != null)
                {
                    string type = obj.Value.GetType().FullName;

                    if (type == "Microsoft.SharePoint.Client.FieldLookupValue")
                    {
                        dr[obj.Key] = ((FieldLookupValue)obj.Value).LookupValue;
                    }
                    else if (type == "Microsoft.SharePoint.Client.FieldUserValue")
                    {
                        dr[obj.Key] = ((FieldUserValue)obj.Value).LookupValue;
                    }
                    else
                    {
                        dr[obj.Key] = obj.Value;
                    }
                }
                else
                {
                    dr[obj.Key] = null;
                }
            }

            dt.Rows.Add(dr);
        }

        ResetDataGridView(); //Clear contents of datagridview
        dataGridView1.DataSource = dt;

希望这会有所帮助..

由于

答案 1 :(得分:0)

    Below function will return you DataTable. 

    internal DataTable GetDataTableFromListItemCollection()
            {
                string strWhere = string.Empty;
                DataTable dtGetReqForm = new DataTable();
                using (var clientContext = new ClientContext("sharepoint host url"))
                {
                    try
                    {
                        Microsoft.SharePoint.Client.List spList = clientContext.Web.Lists.GetByTitle("ReqList");
                        clientContext.Load(spList);
                        clientContext.ExecuteQuery();

                        if (spList != null && spList.ItemCount > 0)
                        {
                            Microsoft.SharePoint.Client.CamlQuery camlQuery = new CamlQuery();
                            camlQuery.ViewXml =
                            @"<View>" +
                            "<Query> " +
                                "<Where>" +
                                    "<And>" +
                                            "<IsNotNull><FieldRef Name='ID' /></IsNotNull>" +
                                            "<Eq><FieldRef Name='ReqNo' /><Value Type='Text'>123</Value></Eq>" +
                                    "</And>" +
                                "</Where>" +
                            "</Query> " +
                            "<ViewFields>" +
                                "<FieldRef Name='ID' />" +
                            "</ViewFields>" +
                            "</View>";

                            SPClient.ListItemCollection listItems = spList.GetItems(camlQuery);
                            clientContext.Load(listItems);
                            clientContext.ExecuteQuery();

                            if (listItems != null && listItems.Count > 0)
                            {
                                foreach (var field in listItems[0].FieldValues.Keys)
                                {
                                    dtGetReqForm.Columns.Add(field);
                                }

                                foreach (var item in listItems)
                                {
                                    DataRow dr = dtGetReqForm.NewRow();

                                    foreach (var obj in item.FieldValues)
                                    {
                                        if (obj.Value != null)
                                        {
                                            string key = obj.Key;
                                            string type = obj.Value.GetType().FullName;

                                            if (type == "Microsoft.SharePoint.Client.FieldLookupValue")
                                            {
                                                dr[obj.Key] = ((FieldLookupValue)obj.Value).LookupValue;
                                            }
                                            else if (type == "Microsoft.SharePoint.Client.FieldUserValue")
                                            {
                                                dr[obj.Key] = ((FieldUserValue)obj.Value).LookupValue;
                                            }
                                            else if (type == "Microsoft.SharePoint.Client.FieldUserValue[]")
                                            {
                                                FieldUserValue[] multValue = (FieldUserValue[])obj.Value;
                                                foreach (FieldUserValue fieldUserValue in multValue)
                                                {
                                                    dr[obj.Key] += (fieldUserValue).LookupValue;
                                                }
                                            }
                                            else if (type == "System.DateTime")
                                            {
                                                if (obj.Value.ToString().Length > 0)
                                                {
                                                    var date = obj.Value.ToString().Split(' ');
                                                    if (date[0].Length > 0)
                                                    {
                                                        dr[obj.Key] = date[0];
                                                    }
                                                }
                                            }
                                            else
                                            {
                                                dr[obj.Key] = obj.Value;
                                            }
                                        }
                                        else
                                        {
                                            dr[obj.Key] = null;
                                        }
                                    }
                                    dtGetReqForm.Rows.Add(dr);
                                }
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                    }
                    finally
                    {
                        if (clientContext != null)
                            clientContext.Dispose();
                    }
                }
                return dtGetReqForm;

            }

//once you have the DataTable() with you you can set the DataSource 

//DataGridView1 is the id value

DataGridView1.DataSource = GetDataTableFromListItemCollection();