Bind items from multiple list in a grid
-
11-10-2020 - |
Pergunta
I want to bind the items from multiple list into a gridview. I earlier used SPSiteDataQuery
to bind the items from multiple list in a gridview but then I was not able to cast the items into ListItemCollection
as I need to get the item property though which I can add a hyperlink field in it with the help of which we can redirect the user to the default edit form of that item.
So how do I bind the items from multiple list into a single grid in a way through which I can get items so that I can navigate to their edit form in the list in which they are?
Solução
protected void BindGrid()
{
using (SPSite oSite = new SPSite(SPContext.Current.Web.Url))
{
using (SPWeb objWeb = oSite.OpenWeb())
{
try
{
SPList List = objWeb.Lists["List1"];
SPList List1 = objWeb.Lists["List2"];
SPList List2 = objWeb.Lists["List3"];
SPList List3 = objWeb.Lists["List4"];
SPQuery query = new SPQuery();
string where = "<Where><And><Eq>";
where += "<FieldRef Name='Status'/>";
where += "<Value Type='Choice'>Approved</Value>";
where += "</Eq><Eq>";
where += "<FieldRef Name='Author' LookupId='True'/>";
where += "<Value Type='Text'>" + SPContext.Current.Web.CurrentUser.ID + "</Value>";
where += "</Eq></And></Where>";
query.Query = where;
DataTable dt = new DataTable();
//Add columns to Data Table
dt.Columns.Add("Title", typeof(string));
dt.Columns.Add("Status", typeof(string));
dt.Columns.Add("ID", typeof(Int32));
dt.Columns.Add("List URL", typeof(string));
SPListItemCollection Coll1 = List.GetItems(query);
SPListItemCollection Coll2 = List1.GetItems(query);
SPListItemCollection Coll3 = List2.GetItems(query);
SPListItemCollection Coll4 = List3.GetItems(query);
foreach (SPListItem item in Coll1)
{
DataRow row = dt.NewRow();
row["Title"] = item.Title;
row["ID"] = item.ID;
row["Status"] = item["Status"];
row["List URL"] = SPContext.Current.Web.Url + List.RootFolder.ServerRelativeUrl + "/EditForm.aspx?ID=" + item.ID + "&Source=/_Layouts/15/hks/getlistitems.aspx";
dt.Rows.Add(row);
}
foreach (SPListItem item in Coll2)
{
DataRow row = dt.NewRow();
row["Title"] = item.Title;
row["ID"] = item.ID;
row["Status"] = item["Status"];
row["List URL"] = SPContext.Current.Web.Url + List1.RootFolder.ServerRelativeUrl + "/EditForm.aspx?ID=" + item.ID + "&Source=/_Layouts/15/hks/getlistitems.aspx";
dt.Rows.Add(row);
}
foreach (SPListItem item in Coll3)
{
DataRow row = dt.NewRow();
row["Title"] = item.Title;
row["ID"] = item.ID;
row["Status"] = item["Status"];
row["List URL"] = SPContext.Current.Web.Url + List2.RootFolder.ServerRelativeUrl + "/EditForm.aspx?ID=" + item.ID + "&Source=/_Layouts/15/hks/getlistitems.aspx";
dt.Rows.Add(row);
}
foreach (SPListItem item in Coll4)
{
DataRow row = dt.NewRow();
row["Title"] = item.Title;
row["ID"] = item.ID;
row["Status"] = item["Status"];
row["List URL"] = SPContext.Current.Web.Url + List3.RootFolder.ServerRelativeUrl + "/EditForm.aspx?ID=" + item.ID + "&Source=/_Layouts/15/hks/getlistitems.aspx";
dt.Rows.Add(row);
}
//Add Columns to Grid
BoundField col1 = new BoundField();
col1.HeaderText = "Title";
col1.DataField = "Title";
mygrid.Columns.Add(col1);
BoundField col2 = new BoundField();
col2.HeaderText = "ID";
col2.DataField = "ID";
mygrid.Columns.Add(col2);
BoundField col3 = new BoundField();
col3.HeaderText = "Status";
col3.DataField = "Status";
mygrid.Columns.Add(col3);
HyperLinkField col4 = new HyperLinkField();
col4.HeaderText = "Edit";
col4.Text = "Edit Item";
col4.DataNavigateUrlFields = new string[] { dt.Columns["List URL"].ToString() };
mygrid.Columns.Add(col4);
//Bind Data in GridView
mygrid.DataSource = dt;
mygrid.DataBind();
}
catch (Exception ex)
{
Page.ClientScript.RegisterClientScriptBlock(typeof(SPAlert),
"alert", "<script language=\"javascript\">alert('" + ex.Message + " .')</script>");
}
}
}
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a sharepoint.stackexchange