2009-12-26 34 views
0

我写了一个扩展SPFieldLookup的自定义字段。我设置了AllowMultipleValues = true; 这里是现场控制值:Sharepoint自定义SPFieldLookup只保存一个值

public override object Value 
    { 
     get 
     { 
      EnsureChildControls(); 
      SPFieldLookupValueCollection vals = new SPFieldLookupValueCollection(); 
      ICollection s = TinBaiLienQuanPicker.SelectedIds; 
      if (s != null && s.Count > 0) 
      { 
       foreach (var i in s) 
       { 
        ListItem z = availableItems.Find(x => (x.Value == i.ToString())); 
        if (z != null) 
        { 
         vals.Add(new SPFieldLookupValue(int.Parse(z.Value), z.Text)); 
        } 
       } 
      } 
      return vals; 
     } 
     set 
     { 
      EnsureChildControls(); 
      base.Value = value as SPFieldLookupValueCollection; 
     } 
    } 

当控制保存现场数据,我看到它返回一个集合其中有多个值。 但是当我再次检索数据时,我只收到第一个值。我从Control Field'ListItemFieldValue属性中获取值。

请给我一个小费。非常感谢你。

回答

0

数据库中查找字段的数据存储逻辑不同,其中一个值与多个值相比较。检查的字段类型定义XML ParentType的设置为LookupMulti而不是查找

+0

嗨,EG。感谢您的回复。 ParentType已被设置为LookupMulti。 – 2009-12-29 06:55:08

0

您必须从MultipleLookupField继承现场控制类,而不是从LookupField继承。你确定你在做这个吗?

+0

嗨,naivists。 当我扩展BaseFieldControl时,我只在显示和编辑模式下获得一个值。如您所说,将继承更改为LookupField或MultipleLookupField时,该字段仅在编辑模式下返回正确的值。在显示模式下,只返回第一个项目。 谢谢。 – 2009-12-30 17:29:06

+0

SharePoint的“十二月累积更新”实际上也在谈论您的问题:“您开发了一个自定义字段类型,该类型继承自SPFieldLookUp类,您希望将多个值存储在该自定义字段类型的字段中,因此,您需要设置AllowMultipleValues属性设置为True。但是,将AllowMultipleValues属性设置为True后,字段类型将显示为Lookup而不是自定义字段类型。 http://support.microsoft.com/kb/977022/ – naivists 2010-01-05 08:11:34