如何合并 2 个共享点列表中的列并将其显示在 ASP.NET GridView 中?
How to Merge a column from 2 sharepoint lists and display it in a ASP.NET GridView?
我有 2 个 Sharepoint 列表。我需要从两个列表中随机选择一些列并将其显示在 ASP.NET GRIDVIEW 中。我已经使用 Linq 完成了这段代码。但我收到一条错误消息,指出该参数为空异常。我可以知道这种错误的原因吗?
using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Linq;
using System.Linq;
using System.Text.RegularExpressions;
using System.Text;
using System.IO;
using System.Diagnostics;
namespace SharePointProject3.VisualWebPart1
{
public partial class VisualWebPart1UserControl : UserControl
{
protected void Page_Load(object sender, EventArgs e)
{
string sQuery = string.Empty;
string sWebUrl;
SPListItemCollection objProductListItems = null;
SPListItemCollection objOrderListItems = null;
string sViewFields = string.Empty;
sWebUrl = SPContext.Current.Site.Url;
sQuery = "<OrderBy><FieldRef Name='Modified' Ascending='FALSE' /></OrderBy>";
sViewFields = string.Concat("<FieldRef Name='ProductId'/>",
"<FieldRef name= 'ProductName' />",
"<FieldRef name= 'ProductDescription' />");
objProductListItems = GetListItems(sWebUrl, "Products", sQuery, sViewFields);
sViewFields = string.Concat("<FieldRef Name='OrderId'/>",
"<FieldRef name= 'Quantity' />",
"<FieldRef name= 'ProductName' />");
objOrderListItems = GetListItems(sWebUrl, "Orders", sQuery, sViewFields);
var Orders = (from itemProduct in objOrderListItems.Cast<SPListItem>()
join itemOrder in objOrderListItems.Cast<SPListItem>()
on Convert.ToString(itemProduct["ProductName"]) equals Convert.ToString(itemOrder["ProductName"])
select new
{
ProductName = Convert.ToString(itemProduct["ProductName"]),
ProductDescription = Convert.ToString(itemProduct["ProductDescription"]),
OrderQuantity = Convert.ToString(itemOrder["Quantity"]),
}).ToList();
if(Orders != null)
{
GridView1.DataSource = Orders;
GridView1.DataBind();
}
}
protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
{
}
public static SPListItemCollection GetListItems(string sWebUrl, string sListName, string sQuery, string sviewFields)
{
SPListItemCollection objListItemCollection = null;
SPSecurity.RunWithElevatedPrivileges(delegate()
{
using (SPSite objSite = new SPSite(sWebUrl))
{
using (SPWeb objWeb = objSite.OpenWeb())
{
SPList objList = objWeb.Lists.TryGetList(sListName);
if (objList != null)
{
SPQuery objSPQuery = new SPQuery();
objSPQuery.Query = sQuery;
objSPQuery.ViewFields = sviewFields;
objListItemCollection = objList.GetItems(objSPQuery);
}
}
}
});
return objListItemCollection;
}
}
}
使用 Linq2SharePoint 不是个好主意。这有很多问题。包括性能问题。有时它会产生奇怪的错误并且很难调试它。您在代码中使用 CAML。 CAML 也可以加入。查看 here 如何操作。它由 SharePoint 本身处理,您将获得单个结果集。
我有 2 个 Sharepoint 列表。我需要从两个列表中随机选择一些列并将其显示在 ASP.NET GRIDVIEW 中。我已经使用 Linq 完成了这段代码。但我收到一条错误消息,指出该参数为空异常。我可以知道这种错误的原因吗?
using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Linq;
using System.Linq;
using System.Text.RegularExpressions;
using System.Text;
using System.IO;
using System.Diagnostics;
namespace SharePointProject3.VisualWebPart1
{
public partial class VisualWebPart1UserControl : UserControl
{
protected void Page_Load(object sender, EventArgs e)
{
string sQuery = string.Empty;
string sWebUrl;
SPListItemCollection objProductListItems = null;
SPListItemCollection objOrderListItems = null;
string sViewFields = string.Empty;
sWebUrl = SPContext.Current.Site.Url;
sQuery = "<OrderBy><FieldRef Name='Modified' Ascending='FALSE' /></OrderBy>";
sViewFields = string.Concat("<FieldRef Name='ProductId'/>",
"<FieldRef name= 'ProductName' />",
"<FieldRef name= 'ProductDescription' />");
objProductListItems = GetListItems(sWebUrl, "Products", sQuery, sViewFields);
sViewFields = string.Concat("<FieldRef Name='OrderId'/>",
"<FieldRef name= 'Quantity' />",
"<FieldRef name= 'ProductName' />");
objOrderListItems = GetListItems(sWebUrl, "Orders", sQuery, sViewFields);
var Orders = (from itemProduct in objOrderListItems.Cast<SPListItem>()
join itemOrder in objOrderListItems.Cast<SPListItem>()
on Convert.ToString(itemProduct["ProductName"]) equals Convert.ToString(itemOrder["ProductName"])
select new
{
ProductName = Convert.ToString(itemProduct["ProductName"]),
ProductDescription = Convert.ToString(itemProduct["ProductDescription"]),
OrderQuantity = Convert.ToString(itemOrder["Quantity"]),
}).ToList();
if(Orders != null)
{
GridView1.DataSource = Orders;
GridView1.DataBind();
}
}
protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
{
}
public static SPListItemCollection GetListItems(string sWebUrl, string sListName, string sQuery, string sviewFields)
{
SPListItemCollection objListItemCollection = null;
SPSecurity.RunWithElevatedPrivileges(delegate()
{
using (SPSite objSite = new SPSite(sWebUrl))
{
using (SPWeb objWeb = objSite.OpenWeb())
{
SPList objList = objWeb.Lists.TryGetList(sListName);
if (objList != null)
{
SPQuery objSPQuery = new SPQuery();
objSPQuery.Query = sQuery;
objSPQuery.ViewFields = sviewFields;
objListItemCollection = objList.GetItems(objSPQuery);
}
}
}
});
return objListItemCollection;
}
}
}
使用 Linq2SharePoint 不是个好主意。这有很多问题。包括性能问题。有时它会产生奇怪的错误并且很难调试它。您在代码中使用 CAML。 CAML 也可以加入。查看 here 如何操作。它由 SharePoint 本身处理,您将获得单个结果集。