2012-12-03 4 views
3

페이지가로드 될 때 사람 편집자 (웹 파트)에 Sharepoint 사용자/그룹 값의 값을 표시하려고합니다. 이 코드는 웹 파트에 표시된 값을 가져 오는 데 사용하는 코드입니다.사람 편집기에서 공유 지점 사람/그룹 필드 목록의 값 표시

if(SPContext .Current .ListItem .ID >= 1) 
     using (SPSite site = new SPSite("sitename")) 
     { 
      using (SPWeb web = site.OpenWeb()) 
      { 
       var id = SPContext.Current.ListItem.ID; 
       SPList lists = web.Lists["DDClist"]; 
       SPListItem item = lists.GetItemById(id); 

       { 

        string test = Convert.ToString(item["Project No"]); 
        tb_pno.Text = test; 
        string test2 = Convert.ToString(item["Project Title"]); 
        tb_pname.Text = test2; 
        string test3 = Convert.ToString(item["DDC No"]); 
        tb_idcno.Text = test3; 
        string test4 = Convert.ToString(item["Date In"]); 
        TextBox3.Text = test4; 

       } 
      } 
     } 

사람들 편집자와 동일한 작업을 수행하는 방법은 무엇입니까?

답변

2

이것은 약간 까다 롭습니다. 한 사용자가 문자열로 저장하는 이유

SPUser singleUser = new SPFieldUserValue(
    item.Web, item["Single User"] as string).User; 

SPUser[] multipleUsers = ((SPFieldUserValueCollection)item["MultipleUsers"]) 
    .Cast<SPFieldUserValue>().Select(f => f.User); 

나는 잘 모르겠지만, 여러 사용자가 저장됩니다 : 전에 그것을 했어 때, 나는 필드에서 SPUser 객체를 얻기 위해 다음을 사용하여 특정 대상; 이 경우에도 일관성이 없을 수 있으므로 약간 디버그하고 필드의 유형을 확인해야 할 수도 있습니다.

ArrayList entityArrayList = new ArrayList(); 
foreach(SPUser user in multipleUsers) // or just once for a single user 
{ 
    PickerEntity entity = new PickerEntity; 
    entity.Key = user.LoginName; 
    entity = peMyPeople.ValidateEntity(entity); 
    entityArrayList.Add(entity); 
} 
peMyPeople.UpdateEntities(entityArrayList); 

이것은 또한의 유효성 검사를 수행 :이 SPUser의이 있으면

, 당신은 (아주 긴 장황한) 다음과 같이 계정 이름을 사용하여 PeopleEditor 제어

을 채울 수 있습니다 어떤 종류의 사용자.

이 컨트롤이 나타나는 페이지가 게시 될 수있는 경우 값이 올바르게 라운드 트립되도록 다시 게시하는 동안 다음을 수행해야합니다. 나는 PreRender에 넣어하지만 라이프 사이클의 다른 곳에서 일어날 수 :

protected override void OnPreRender(EventArgs e) 
{ 
    if (IsPostBack) 
    { 
     var csa = peMyPeople.CommaSeparatedAccounts; 
     csa = peMyPeople.CommaSeparatedAccounts; 
    } 
} 

당신이 컨트롤 (사용자 입력이 잘못된 경우),이 짓을 할 필요가 당신을 위해 생성하는 오류 메시지를 확인하려면 이미 switchout는 :

var csa = usrBankSponsor.CommaSeparatedAccounts; 
csa = usrOtherBankParties.CommaSeparatedAccounts; 
//ErrorMessage is incorrect if you haven't done the above 
if (!String.IsNullOrEmpty(usrBankSponsor.ErrorMessage)) 
{ 
    ... 
} 

정말 아주 좋은 아니라 그것을 처리하는 더 나은 방법이있을 수 있지만 그것이 당신에게 시간을 절약 할 수 지금까지 그렇게 잘하면 내 경험의 결과입니다.

+0

감사합니다. 그것은 많은 도움이된다. – MRu