我已創建自定義字段類型,以將可用用戶列入Dropdownlist。我的Field類繼承自SPFieldChoice,FieldControl類繼承自DropDownChoiceField。 FieldControl類作爲內部現在我已經寫代碼,自定義字段類型下拉列表共享點
this.ddlInfoBox = new DropDownList();
SPSite site = SPContext.GetContext(this.Context).Site;
SPWeb cWeb = SPContext.Current.Web;
Hashtable ht = new Hashtable();
SPUserCollection spUsers = cWeb.AllUsers;
foreach (SPUser item in spUsers)
{
SPFieldUser o= new SPFieldUser(
ht.Add(item.Name, item);
}
this.ddlInfoBox.DataTextField = "Key";
this.ddlInfoBox.DataValueField = "Value";
this.ddlInfoBox.DataSource = ht;
this.ddlInfoBox.DataBind();
即我想要呈現下拉列表與用戶名。現在Value屬性,
public override object Value
{
get
{
EnsureChildControls();
return this.ddlInfoBox.SelectedValue;
}
set
{
EnsureChildControls();
this.ddlInfoBox.SelectedValue = (string)this.ItemFieldValue;
}
}
讓說我有自定義字段類型來完成,當我在一個名爲「temp」的列表中使用這個領域,試圖創建一個列表項它爲我提供這個網站的使用者,當我創建一個項目時,數據將以選定用戶的字符串形式存儲,並且當我嘗試將該列表視爲Web部件時,將用戶值過濾爲[我]。即分配給我的文檔,它不允許我這樣做,因爲它是字符串值而不是SPFieldUser值。 如何將此字符串值存儲爲正常人和組開箱即用的字段類型存儲區的SPFieldUser?
爲什麼要從Value屬性中調用EnsureChildControls?請小心,因爲這可能會影響ASP.NET頁面的生命週期。 – 2009-06-24 10:45:38