我SPFieldLookup
以编程方式将一个字段添加到列表中。
当我检查我的列表视图时,我发现查找字段就好像我从用户界面添加了它,但没有指定它链接到项目。
有没有一种方法可以强制将查找字段以编程方式链接到项目?
我SPFieldLookup
以编程方式将一个字段添加到列表中。
当我检查我的列表视图时,我发现查找字段就好像我从用户界面添加了它,但没有指定它链接到项目。
有没有一种方法可以强制将查找字段以编程方式链接到项目?
如果您同时配置 SPFieldLookup 字段所在的列表和目标列表,您将遇到问题。因为 SPFieldLookup 字段需要通过其 GUID 分配目标列表,该 GUID 是在激活该功能时动态创建的。而且你不能在你的字段定义中定义这个值,因为它还不存在。
此问题的解决方案是正常配置“源”列表和目标列表,但源列表中的 SPFieldLookup 字段除外。
然后,在功能激活事件中,您以编程方式添加此查找字段,现在可以完成此操作,因为您拥有(或至少可以找到)目标列表的 GUID。
这是我看到并愿意分享的一个很好的片段让我们假设我们已经创建了两个列表 aList 和 bList。要求是在 aList 中创建一个查找列,该列将在 bList 中查找值。
SPList aList = web.Lists["aList"];
SPList bList = web.Lists["bList"];
aList.Fields.AddLookup("Lookup", bList.ID, false);
SPFieldLookup fldLookup = aList.Fields["Lookup"] as SPFieldLookup;
fldLookup.LookupField = bList.Fields[SPBuiltInFieldId.Title].InternalName;
fldLookup.Update();
之后您是否填写了所有需要的属性(LookupField、LookupWebId 以及可能还有 LookupList)和 Update() 字段?