0

我已经弄清楚如何将记录添加到库中。我唯一想弄清楚的是如何(或者可能在哪里)从查找列表中保存用户的选择?

在下面的代码片段中,我正在保存一个新的列表项。它保存时没有错误,但字段“AwardType”和“AwardReason”是查找字段,虽然我没有收到错误,但没有任何内容保存到它们。如何保存到用户的查找字段选择?

using (SPSite site = new SPSite(SPContext.Current.Web.Url))
{
    using (SPWeb web = site.OpenWeb())
    {
        using (FileStream fs = (new FileInfo(fileUpload.PostedFile.FileName)).OpenRead())
        {
            SPList list = web.Lists["Awards"];
            Hashtable ht = new Hashtable();
            ht.Add("wfRecipientName", txtRecipientName.Text);
            ht.Add("Office", txtOrganization.Value);
            ht.Add("AwardType", ddAwardTypes.SelectedValue);
            ht.Add("AwardReason", ddAwardReasons.SelectedValue);

            SPFile destfile = list.RootFolder.Files.Add(fileUpload.FileName, fs, ht, false);
        }
    }
}
4

3 回答 3

3

Storing a lookup's value is done with SPFieldLookupValue(ID, Value).

You need to store the object returned by this method in a list item field, not a property via a hash table. In my example below, Awards list is document library and AwardType is a field of type lookup.

SPList list = web.Lists["Awards"];
Hashtable ht = new Hashtable();
ht.Add("Office", "Chicago"); // standard property
SPFile file = list.RootFolder.Files.Add(System.IO.Path.GetFileName(FileUpload1.PostedFile.FileName), fs, ht, true);
SPListItem item = file.Item; // get the item for the just-added file.

// assign the lookup column using SPFieldLookupValue
item["AwardType"] = new SPFieldLookupValue(
    Int32.Parse(DropDownList1.SelectedValue),
            DropDownList1.Text);
item.Update();  // to save the lookup column.
于 2012-09-07T06:07:59.067 回答
0

您必须将 SPFieldLookUpValue 作为字符串添加到 HashTable,而不是 Lookup 的值。除了 int、string、date 之外,存储在 HashTable 上的属性将不会在 Document 创建时被解析。

    SPFieldLookupValue v = new SPFieldLookupValue(item["lookUpField"].ToString());
Hashtable documentProperties = new Hashtable();
documentProperties.Add("key", v.ToString());
 SPFile file = docLib.RootFolder.Files.Add("fileName", memoryStream, documentProperties, true);

对于 SPUser 等复杂对象,也可以这样做。

SPFieldUserValue userValue = new SPFieldUserValue(web, web.CurrentUser.ID, web.CurrentUser.LoginName);
  documentProperties.Add("SPuSER", userValue.ToString());
于 2014-12-10T10:06:07.597 回答
0

有趣的是,这条线

SPListItem item = file.Item; // get the item for the just-added file.

是关键。

我在使用下面的代码时遇到了麻烦 - 查找没有持续更新!?

file.Item["AwardType"] = new SPFieldLookupValue(
    Int32.Parse(DropDownList1.SelectedValue),
            DropDownList1.Text);
于 2013-03-08T00:07:02.620 回答