2009-06-24 4 views
1

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 필드 유형을 저장할 수 있습니까?

+0

왜 Value 속성에서 EnsureChildControls를 호출합니까? ASP.NET 페이지 수명주기를 방해 할 수 있으므로주의하십시오. –

답변

1

SPFieldChoice 대신 SPFieldUser에서 파생 될 수 있습니까? DropDownChoiceField는 UserField를 사용합니까?

0
SPUserCollection userscollection = rootWeb.SiteUsers; 
SPUser user = userscollection.Web.EnsureUser("Domain\username"); 
SPFieldUserValue userval = 
    new SPFieldUserValue(user.ParentWeb, user.ID, user.LoginName);