我正在忙着构建一个包含各种文本框和查找字段的自定义webpart。除了允许多项选择的查找字段之外,所有这些都正确保存。我没有查找字段的问题,只允许选择一个值。
下面是获取我的复选框列表中所有选定项目的代码,将其转换为多选项值并分配到我的列表[columnname]
try
{
SPFieldMultiChoiceValue _segmentchoices = new SPFieldMultiChoiceValue();
foreach (ListItem ls3 in _segment.Items)
{
if (ls3.Selected) _segmentchoices.Add(ls3.Value);
}
myItems["Segment"] = _segmentchoices;
myItems.Update();
}
catch (Exception ex) { _errorMessage += "||| Segment : " + ex.Message; }
正确创建了值列表(_segmentchoices),如下所示:{;#1;#2;#3;#4;#5;#}
然而,当它保存时,它只保存值1,3和5.
我的代码没有产生错误,所以我对可能出错的东西感到茫然。关于我需要看什么的任何想法?我是以错误的方式去做的吗?
任何帮助将不胜感激。 谢谢
答案 0 :(得分:1)
我刚刚意识到您正在谈论多选查找字段。格式应类似于:2;#Procedures;#3;#Systems;#7;#Services
您描述的行为很有意义,因为它可能会像这样解释;#1;#2;#3;#4;#5;#
:查找列表中的项目,其lookupID为1(lookupValue为2
),lookupID为3(lookupValue为4
),而lookupID为5(lookupValue为空)
以下是一些可用于更新多选选择字段的代码:
using (SPSite site = new SPSite(siteUrl))
{
using (SPWeb web = site.OpenWeb())
{
SPList list = web.Lists[listName];
SPListItem item = list.Items[0];
SPFieldLookupValueCollection spflvc = new SPFieldLookupValueCollection();
spflvc.Add(new SPFieldLookupValue(3, string.Empty));
spflvc.Add(new SPFieldLookupValue(7, string.Empty));
item["Keywords"] = spflvc;
item.Update();
}
}
SPFieldLookupValue
的第二个参数似乎并不关心它是否传递了string.Empty,这也可以解释为什么它会忽略它们。