2012-09-07 58 views
0

我已經找到了如何添加一條記錄到庫中。我試圖弄清楚的唯一方法是如何(或可能在哪裏)從查找列表中保存用戶的選擇?保存查找值到SharePoint 2010

在下面的代碼片段,我節省了一個新的列表項。它沒有錯誤地保存,但「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); 
     } 
    } 
} 

回答

3

用SPFieldLookupValue(ID,Value)存儲查找值。

您需要存儲通過哈希表列表中的項目領域,而不是財產這個方法返回的對象。在下面的示例中,獎勵列表是文檔庫,AwardType是查找類型的字段。

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. 
+0

這真是棒極了...謝謝。 –

0

有趣的是,線

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

是關鍵。

我有麻煩時,我用下面的代碼 - 查找沒有始終如一地更新!?

file.Item["AwardType"] = new SPFieldLookupValue(
    Int32.Parse(DropDownList1.SelectedValue), 
      DropDownList1.Text); 
0

您必須將SPFieldLookUpValue作爲字符串添加到HashTable中,而不是Lookup的值。 存儲在HashTable中的int,string,date之外的屬性在文檔創建時不會被解析。

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());