我可能完全错误地解决了这个问题,但我对SP发展仍然有点新鲜,而且已经很晚了。
编辑:是的,我正在考虑这个错误。我只记得SPListCollection与数据库绑定,如果我要添加记录,它将无法正常工作。我将尝试使用交叉列表查询。我有两个SP列表,我需要查询一个,获取项目列表,然后使用这些项目ID查询另一个列表以获取它的“子项”,每个父项可以有多个子项。
我可以让它工作正常,踢球者是我需要构建一个SPListItemCollection以用于代码的其他部分。我正在尝试改进一些东西以使用这个新的查找过程,而且它都基于SPListItemCollections。这是一段代码:
foreach (SPListItem i in NAICParents)
{
//query child slides
SPQuery qChildren = new SPQuery();
SPFieldLookupValue tmp = new SPFieldLookupValue(i.ID, i.Title);
qChildren.Query = "<Where><Eq><FieldRef Name=\"paNAICParent\" /><Value Type=\"Lookup\">" + tmp.ToString().Substring(tmp.ToString().IndexOf('#') + 1) + "</Value></Eq></Where>";
target = _web.Lists["paNAICUpdateSlides"];
SPListItemCollection children = target.GetItems(qChildren);
SPListItem temp = null;
foreach (SPListItem l in children)
{
temp =itmAll2.Add();
temp = l;
temp.Update();
}
}
它死于temp = itmAll2.add()。我得到一个空引用错误。这是有道理的,因为我从未实例化过SPListItemCollection,但我无法获取代码让我将其实例化为空白。
我可以复制列表结构来实例化空白列表吗?或类似的东西?
谢谢,
答案 0 :(得分:2)
我不建议尝试在代码中重用SPListItemCollection。这可能导致幕后SPWeb objects being reopened。
相反,我会使用SPListItemCollection.GetDataTable来获取一个DataTable
来保存你的内存对象,然后你可以在代码中重用它。或者,您可以创建与列表中的每个项目对应的Bean对象。
然后,您可以在不打开更多数据库连接的情况下向内存中的对象添加或删除项目。