2012-02-08 57 views
1

我在SharePoint中構建了一個自定義Web部件,它呈現一個表單以創建新的列表項。我有一個ListId set和ControlMode.New的listfielditerator和一個savebutton。這工作!SharePoint ListfieldIterator默認值

唯一的附加功能是在呈現的字段控件上放置動態默認值。我想我可以做到這一點,如下所示:

在OnInit的,使迭代工作:

SPContext.Current.FormContext.FormMode = SPControlMode.New; 

newFormIterator.ListId = SPContext.Current.Web.Lists["MyList"].ID; 
newFormIterator.ItemContext = SPContext.GetContext(HttpContext.Current,0, newFormIterator.ListId, SPContext.Current.Web); 

在OnInit中或的OnLoad或的OnPreRender爲設定值:

TextField field = (TextField)newFormIterator.Fields["Customer"].FieldRenderingControl; 
//field.ItemContext = newFormIterator.ItemContext; 
//field.RenderContext = newFormIterator.ItemContext; 
//field.ListItemFieldValue = settings.CustomerName; 
field.Value = settings.CustomerName; 
field.UpdateFieldValueInItem(); 

我曾嘗試評論線也是,但沒有結果。這個問題是一個例外,因爲當調用UpdateFieldValueInItem()時,field.Item爲null。

問題:

  1. 我怎樣才能正確地使用listfielditerator的listcontext外(在Web部件一個普通頁)。我缺少上下文嗎?
  2. 如何在listfielditerator中的字段上設置默認值,而不是在列表的內容類型字段中指定的值。

閱讀資源:

http://karinebosch.wordpress.com/sharepoint-controls/listfielditerator/

http://pholpar.wordpress.com/2009/12/

+1

當我嘗試使用困難的方法,然後在OnPreRender中循環控制樹,搜索TextField時,我可以找到它並直接設置一個值。這工作:)但..我仍然好奇爲什麼上面的情況不起作用。 – Rene 2012-02-08 08:37:41

回答

0

我想你不應該叫field.UpdateFieldValueInItem();直接 - 在OnInit中設置渲染控制值就足夠了。當按下SaveButton並創建項目時,UpatedFieldValueInItem()將自動調用。所以儘量只此:

文本字段字段= (文本字段)newFormIterator.Fields [ 「客戶」] FieldRenderingControl;
field.Value = settings.CustomerName;