//从SPListItem中取SPUser方法、代码 处理Sharepoint中的SPListItem时,有时需要获得这个对象的"Created By"(创建者),并且希望是SPUser类型,而不是string,这样可以进而得到该用户的权限、ID等等。 "Person or Group"(用户或组)对应的类型是SPFieldUser,怎么把SPFieldUser转成SPUser呢? 网上找了些资料,发现要获得SPUser需要借助SPFieldUserValue,借鉴了一些代码,自己试了试,写了一个通用的方法: SPUser GetSPUserFromSPListItemByFieldName(SPListItem spItem, string fieldName) { string userName = spItem[fieldName].ToString(); SPFieldUser _user = (SPFieldUser)spItem.Fields[fieldName]; SPFieldUserValue userValue = (SPFieldUserValue)_user.GetFieldValue(userName); return userValue.User; } //SharePoint中的"用户或用户组"栏,当选择了"允许多重选择"后,用对象模型SPListItemCollection["栏名"]获得到的是SPFieldUserValueCollection的对象: SPFieldUserValueCollection users = SPListItem["栏名"] as SPFieldUserValueCollection; 如果将SPListItemCollection["栏名"]输入字符串的话,是"用户ID;#用户Name", 一 为栏赋值有这几种方式, SPListItem["栏名"] = SPUser实例或者SPGroup实例,但是不能赋SPUserCollection; SPListItem["栏名"] = "用户ID;#用户Name;#用户ID;#用户Name......"; SPListItem["栏名"] = SPFieldUserValueCollection实例;(当栏设置允许多重选择为否时,赋的值都是集合中的第一个) SPListItem["栏名"] = SPFieldUserValue实例; 二 获取栏的值 当栏设置为"允许多重选择"为否时,不管用SPFieldUserValueCollection userValues=item["栏名"] as SPFieldUserValueCollection;还是SPFieldUserValue userValue = item["栏名"] as SPFieldUserValue;得到的值都是Null; 如果想判断是否选择了"允许多重选择",可以先查看SPFieldUser字段的AllowMutipleValues属性.不过真麻烦. 实际上在该字段在"允许多重选择"为否时,字段类型是string,为是时,字段类型是SPFieldUserValueCollection. protected void btnOK_Click(object sender, EventArgs e) { ArrayList list = PeopleEditor1.ResolvedEntities; string msgTo = ""; //获取id和显示名称 foreach (Microsoft.SharePoint.WebControls.PickerEntity p in list) { string userId = p.EntityData["SPUserID"].ToString(); msgTo += userId + "#"; } //获取帐号 ArrayList selectedAccoutList = PeopleEditor1.Accounts; string selectedAccouts2 = PeopleEditor1.CommaSeparatedAccounts; SPSecurity.RunWithElevatedPrivileges(delegate() { if (msgTo != "") { for (int i = 0; msgTo.Length > 1; i++) { string lassmsgto = string.Empty; lassmsgto = msgTo.Substring(msgTo.IndexOf("#") + 1); msgTo = msgTo.Substring(0, msgTo.IndexOf("#")); SPSite site = new SPSite(SPContext.Current.Site.Url); SPWeb web = site.RootWeb; .AllowUnsafeUpdates = true; web.AllowUnsafeUpdates = true; SPListItem item = web.Lists["Messageboard"].Items.Add(); item["ToNameID"] = msgTo; item["Content"] = this.txtContent.Text.Trim(); item["Title"] = this.txtTitle.Text.Trim(); SPFieldUserValue userValue = new SPFieldUserValue(web,msgTo); item["ToName"] = userValue; item.Update(); web.AllowUnsafeUpdates = false; site.AllowUnsafeUpdates = false; msgTo = lassmsgto; } } }); GridView1Show(); }