在人物编辑器中显示sharepoint people / group字段列表的值

时间:2012-12-03 12:33:27

标签: c# visual-studio-2010 sharepoint-2010 web-parts

我希望在加载页面时在人物编辑器(Web部件)中显示sharepoint人员/组值的值。这是我用来获取Web部件中显示的值的代码

  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;

                }
            }
        }

有没有办法与人物编辑器做同样的事情?

1 个答案:

答案 0 :(得分:2)

这有点棘手;当我以前必须这样做时,我使用以下内容从字段中获取SPUser个对象:

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

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

我不确定为什么一个用户存储为字符串,但多个用户存储为特定对象;它可能也不一致,所以你可能需要调试一下,看看你的字段中的类型是什么。

获得这些SPUser后,您可以填充PeopleEditor控件

使用如下的帐户名称(非常冗长):

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);

这也会对某种用户进行验证。

如果显示此控件的页面可能会回发,则需要在回发期间执行以下操作,以便正确地舍入值;我把它放在PreRender中,但它可能发生在生命周期的其他地方:

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

如果要检查控件为您生成的任何错误消息(如果用户输入不正确),您需要已经完成此切换:

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

这真的不是很好,并且可能有更好的处理方法,但这是我迄今为止的经验的结果,所以希望它会为你节省一些时间。