【问题标题】:Bind ListItemCollection as a DataSource of a DataGridView将 ListItemCollection 绑定为 DataGridView 的 DataSource
【发布时间】:2016-03-08 12:44:45
【问题描述】:

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

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

【问题讨论】:

    标签: c# sharepoint client-side


    【解决方案1】:

    试试这个 -

            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;
    

    希望这会有所帮助..

    谢谢

    【讨论】:

      【解决方案2】:
          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(); 
      

      【讨论】:

        猜你喜欢
        • 2012-10-25
        • 2021-08-04
        • 2013-12-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-12
        • 2018-01-28
        • 2016-02-07
        • 1970-01-01
        相关资源
        最近更新 更多