Wednesday, 9 March 2016

How to get all items from a SharePoint Online list with all columns data?


Here is one of the ways to get all SPOL list items with all columns:


Method to fetch items:

private void btnGetListItems_Click(object sender, EventArgs e)
        {
            progressBar.Minimum = 0;
            progressBar.Maximum = 10;
            progressBar.Value = 1;
            var targetSite = new Uri(txtSiteUrl.Text.Trim());
            var login = txtUserID.Text.Trim();
            var password = txtPassword.Text;
            var securePassword = new SecureString();

            progressBar.Value = 3;
            foreach (char c in password)
            {
                securePassword.AppendChar(c);
            }

            var onlineCredentials = new SharePointOnlineCredentials(login, securePassword);

            using (ClientContext clientContext = new ClientContext(targetSite))
            {
                try
                {
                    clientContext.Credentials = onlineCredentials;
                    Web web = clientContext.Web;
                    var list = clientContext.Web.Lists.GetByTitle(drpLists.SelectedItem.ToString());
                    var view = list.Views.GetByTitle("All Items");
                    clientContext.Load(view, v => v.ViewFields, v => v.ListViewXml);
                    clientContext.ExecuteQuery();
                    progressBar.Value = 4;
                    var query = new CamlQuery();
                    query.ViewXml = "<View><Query>" + view.ListViewXml + "</Query></View>";
                    var items = list.GetItems(query);
                    clientContext.Load(items);
                    clientContext.ExecuteQuery();
                    progressBar.Value = 5;
                    dtResults = new DataTable();
                    columnNames = new List<string>();
                    string clmn = string.Empty;
                    foreach (var listColumn in view.ViewFields)
                    {
                        if (listColumn.ToString().ToLower().Contains("linktitle"))
                        {
                            columnNames.Add("Title");
                            dtResults.Columns.Add("Title");
                            continue;
                        }
                        if (listColumn.ToString().ToLower().Contains("attachments"))
                            continue;
                        columnNames.Add(listColumn.ToString());

                        dtResults.Columns.Add(listColumn.ToString());
                    }
                    progressBar.Value = 6;
                 
                    FillGridView(items);
                    btnExportToExcel.Enabled = true;
                    progressBar.Value = 10;
                }
                catch (Exception ex)
                {
                    progressBar.Value = 10;
                    SWF.MessageBox.Show("Error: " + ex.Message);
                }
            }
        }

Method to fill items in DataTable/GridView:

        protected void FillGridView(ListItemCollection itemsColl)
        {
            try
            {
                progressBar.Value = 7;
                DataRow row;
                foreach (ListItem item in itemsColl)
                {
                    row = dtResults.NewRow();
                    foreach (string listColumn in columnNames)
                    {
                        try
                        {
                            row[listColumn] = item.FieldValues[listColumn].ToString();
                        }
                        catch (Exception ex)
                        {
                            row[listColumn] = string.Empty;
                        }

                    }
                    dtResults.Rows.Add(row);
                }
                progressBar.Value = 8;

                dataGridResults.DataSource = dtResults;
                try
                {
                    for (int col = 0; col < dtResults.Columns.Count; col++)
                    {
                        dtResults.Columns[col].ColumnName = dtResults.Columns[col].ColumnName.Replace("_x0020_", " ");
                        dtResults.Columns[col].ColumnName = dtResults.Columns[col].ColumnName.Replace("_x00", string.Empty);

                    }
                }
                catch (Exception ex) { }
            }
            catch (Exception ex)
            {
                progressBar.Value = 10;
                SWF.MessageBox.Show("Error while generating report: " + ex.Message);
            }

        }

No comments:

Post a Comment