Dropdownlist에 사용 가능한 사용자를 나열 할 수있는 사용자 정의 필드 유형을 만들었습니다. My Field 클래스는 SPFieldChoice 및 FieldControl 클래스에서 상속되며 DropDownChoiceField에서 상속됩니다. 나는 사용자 이름과 드롭 다운리스트를 렌더링하기 위해 노력하고 사용자 정의 필드 유형 드롭 다운 목록 sharepoint
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();
즉
로 FieldControl 클래스 내부 지금 작성한 코드. 이제 Value 속성public override object Value
{
get
{
EnsureChildControls();
return this.ddlInfoBox.SelectedValue;
}
set
{
EnsureChildControls();
this.ddlInfoBox.SelectedValue = (string)this.ItemFieldValue;
}
}
하자 나는 "온도"라는 이름의 목록에서이 필드를 사용하고이 사이트 나에게 사용할 수있는 사용자를 보여줍니다 목록 항목을 만들려고 할 때 나는, 사용자 정의 필드 유형으로 수행하고 말 것입니다 , 항목을 만들면 선택한 사용자에 대한 문자열로 데이터가 저장되며 사용자가 [Me] 값으로 필터를 사용하여 웹 파트로 해당 목록을 보려고합니다. 즉 SPFieldUser 값이 아닌 문자열 값이므로 저에게 할당 된 문서를 처리 할 수 없습니다. 이 문자열 값을 SPFieldUser로 저장하여 일반 사람 및 그룹의 Out of Box 필드 유형을 저장할 수 있습니까?
왜 Value 속성에서 EnsureChildControls를 호출합니까? ASP.NET 페이지 수명주기를 방해 할 수 있으므로주의하십시오. –