2013-11-09 59 views
0

我正在使用SharePoint Server 2013.我試圖在Windows窗體應用程序(客戶端應用程序)中的DataGridView中顯示列表數據。我獲得了與特定列表相關的ListItemCollection對象。如何將該對象映射到DataGridView的數據源?將ListItemCollection綁定爲DataGridView的數據源

我找不到任何具體的方法從ListItemCollection對象中獲取DataTable對象。因爲我用來獲取數據的列表是通過下拉列表選擇的。所以對於Datatable對象沒有預定的列。提前致謝。 :)

回答

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; 

希望這有助於..

感謝

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