我最终修改了来自公开发布的POC:http://datacogs.com/datablogs/archive/2007/08/26/641.aspx的源代码,这是用于级联下拉列表的自定义字段定义。这些修改允许父子列表框,用户可以在其中进行多选以进行过滤并选择要写回SharePoint列表的值。我得到了父子级联行为,但保存操作只接受从列表框中选择的第一个值。我将自定义字段控件的基本类型从“SPFieldText”更改为“SPMultiLineText”,同时更改了FLD_TYPES字段定义值: 要注意的文字,这不起作用。因此,我将字段控制基类型更改为“SPFieldMultiChoice”,将FLD_TYPES更改为“MultiChoice”,并且仍然获得相同的结果,这只是选择的第一个值,写入SharePoint列表。
有没有人知道如何获取具有多个选择的自定义字段以将这些多个选择写入SharePoint列表?
感谢您花时间阅读我的帖子。
干杯, 〜彼得
答案 0 :(得分:1)
我能够通过继承SPFieldLookup
并覆盖其AllowMultipleValues
的内部处理来实现这一目标:
在你的FLDTYPES中_ * .xml设置<ParentType>LookupMulti</ParentType>
在SPFieldLookup
的附加信息中,请务必覆盖AllowMultipleValues
(始终为true
),FieldValueType
(可能为typeof(SPFieldLookupValueCollection)
)和{{ 1}}。我也设置FieldRenderingControl
,虽然回想起来我不知道为什么。 :)
在字段编辑器控件的base.LookupField = "LinkTitleNoMenu"
中,将字段的OnSaveChange()
值设置为Mult
。
要设置true
,您可以在Mult
上进行字符串操作:
field.SchemaXml
或使用反射:
string s = field.SchemaXml;
if (s.IndexOf(" Mult=", StringComparison.OrdinalIgnoreCase) < 0)
field.SchemaXml = s.Insert(s.IndexOf("/>", StringComparison.Ordinal), " Mult=\"TRUE\" ");
已经有一段时间了,所以我可能会忘记一些事情,但这应该是其中的大部分内容。