2012-02-08 7 views
1

SharePointで新しいリストアイテムを作成するためのフォームをレンダリングするカスタムWebパーツを作成しています。 ListIdセットとControlMode.Newとsavebuttonを持つlistfielditeratorがあります。これは動作します!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または読み込み時や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であるため、この問題は例外です。

質問:私は(通常のページ上のWebパーツに)listcontext外に適切にlistfielditeratorを使用するにはどうすればよい

  1. 。コンテキストがないのですか?
  2. リストのフィールドタイプフィールドで指定されている以外のリストフィールドテーターのフィールドにデフォルト値を設定するにはどうすればよいですか。

読む資源:

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

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

+1

私が難しいやり方をして、OnPreRenderでcontroltreeをループして、TextFieldを検索したら、それを見つけて値を直接設定できます。これはうまくいきます:)しかし、なぜ上のシナリオがうまくいかないのか不思議です。 – Rene

答えて

0

私はあなたがfield.UpdateFieldValueInItem()を呼び出すべきではありませんと思います。 OnInitでのfielfレンダリングコントロールの値を直接設定するだけで十分です。 UpButtonを押して項目を作成すると、UpatedFieldValueInItem()が自動的に呼び出されます。だから、これを試してみてください。

のTextFieldフィールド= (テキストフィールド)newFormIterator.Fields [ "お客様"] FieldRenderingControl;。
field.Value = settings.CustomerName;

関連する問題