Hi,
I have rather a simple webpart that has a listbox with two buttons - one to
add users and other to remove users. I am calling Usergroup.asmx webservice
for getting the info in the listbox.
When i select an item in listbox and click delete, the list box is not
refreshing with new data(deleted data)... I am kind of surprised at this
rather strange behavior.. If i manually refresh the page, it shows the
updated list...
strangely enough, its working fine for adding users to the list(the listbox
shows newly added members on postback)..
using System;
using System.Runtime.InteropServices;
using System.Web.UI;
//using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using Microsoft.SharePoint.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Serialization;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Utilities;
using Microsoft.SharePoint.WebPartPages;
using System.Xml;
//using System.ComponentModel;
using System.Collections;
//web service related
//using System.Web.Services;
//using System.Xml.Serialization;
//using System.Web.Services.Description;
//using System.Web.Services.Discovery;
//using System.Net;
using TestWebPart2.AlterUserDetails;
namespace MyWebParts
{
[XmlRoot(Namespace = "MyWebParts")]
[Guid("da80a2e7-d4e2-49f0-b802-de12c2745ed7")]
//public class TestWebPart2 : System.Web.UI.WebControls.WebParts.WebPart
public class TestWebPart2 : Microsoft.SharePoint.WebPartPages.WebPart
{
//HtmlButton btnAddToReadOnlyList;
//HtmlButton btnRemoveFromReadOnlyList;
//HtmlButton btnAddToReadWriteList;
//HtmlButton btnRemoveFromReadWriteList;
System.Web.UI.WebControls.Button btnAddToReadOnlyList;
System.Web.UI.WebControls.Button btnRemoveFromReadOnlyList;
System.Web.UI.WebControls.Button btnAddToReadWriteList;
System.Web.UI.WebControls.Button btnRemoveFromReadWriteList;
PeopleEditor objPeopleEditor;
System.Web.UI.WebControls.ListBox lstReadOnlyUsers;
System.Web.UI.WebControls.ListBox lstReadWriteUsers;
private string strText;
private void btnRemoveFromReadOnlyList_click(object sender,
EventArgs e)
{
try
{
if (lstReadOnlyUsers.SelectedIndex != -1)
{
RemoveUserFromRole("ReadOnly",
lstReadOnlyUsers.SelectedValue);
strText += "Remove Clicked";
}
this.SaveProperties = true;
}
catch (Exception objException)
{
this.objPeopleEditor.ErrorMessage = "Error... Could not
remove name(s) from the Read Only list.";
this.objPeopleEditor.ErrorMessage += objException.StackTrace;
}
}
private void btnAddToReadWriteList_click(object sender, EventArgs e)
{
try
{
foreach (string strLoginName in objPeopleEditor.Accounts)
{
AddUserToRole("FieldReadWrite", strLoginName);
}
this.SaveProperties = true;
}
catch(Exception objException)
{
this.objPeopleEditor.ErrorMessage = "Error... Could not add
name(s) to Read Write list.";
this.objPeopleEditor.ErrorMessage += objException.StackTrace;
}
}
private void btnRemoveFromReadWriteList_click(object sender,
System.EventArgs e)
{
try
{
strText = lstReadOnlyUsers.SelectedValue + "::" +
lstReadOnlyUsers.SelectedIndex;
if (lstReadWriteUsers.SelectedIndex != -1)
{
RemoveUserFromRole("FieldReadWrite",
lstReadWriteUsers.SelectedValue);
}
this.SaveProperties = true;
}
catch (Exception objException)
{
this.objPeopleEditor.ErrorMessage = "Error... Could not
remove name(s) from the Read Write list.";
this.objPeopleEditor.ErrorMessage += objException.StackTrace;
}
}
private void btnAddToReadOnlyList_click(object sender, EventArgs e)
{
try
{
foreach (string strLoginName in objPeopleEditor.Accounts)
{
//1073741924
//bool blnUserInReadWriteRole =
CheckIfUserIsInRole("FieldReadWrite", strLoginName);
//1073741925
AddUserToRole("FieldReadOnly", strLoginName);
}
this.SaveProperties = true;
}
catch (Exception objException)
{
this.objPeopleEditor.ErrorMessage = "Error... Could not add
name(s) to Read Only list.";
this.objPeopleEditor.ErrorMessage += objException.StackTrace;
}
}
private bool CheckIfUserIsInRole(string strRole, string strUserName)
{
bool blnUserIsInThisRole = false;
SPWeb objWeb =
SPControl.GetContextWeb(System.Web.HttpContext.Current);
//test
UserGroup objService = new UserGroup();
objService.Url = objWeb.Url + "/_vti_bin/usergroup.asmx";
objService.Credentials =
System.Net.CredentialCache.DefaultCredentials;
XmlNode xnUsers = objService.GetUserCollectionFromRole(strRole);
XmlTextReader xr = new XmlTextReader(xnUsers.OuterXml,
XmlNodeType.Element, null);
System.Data.DataSet ds = new System.Data.DataSet();
ds.ReadXml(xr);
xr.Close();
if (ds.Tables["User"] != null)
{
System.Data.DataRow[] drRows =
ds.Tables["User"].Select("LoginName = '" + strUserName + "'");
if (drRows.Length > 0)
{
blnUserIsInThisRole = true;
}
}
return blnUserIsInThisRole;
}
private void RemoveUserFromRole(string strRole, string
strUserLoginName)
{
SPWeb objWeb =
SPControl.GetContextWeb(System.Web.HttpContext.Current);
UserGroup objService = new UserGroup();
objService.Url = objWeb.Url + "/_vti_bin/usergroup.asmx";
objService.Credentials =
System.Net.CredentialCache.DefaultCredentials;
objService.RemoveUserFromRole(strRole,strUserLoginName);
}
private void AddUserToRole(string strRole, string strUserLoginName)
{
SPWeb objWeb =
SPControl.GetContextWeb(System.Web.HttpContext.Current);
UserGroup objService = new UserGroup();
objService.Url = objWeb.Url + "/_vti_bin/usergroup.asmx";
objService.Credentials =
System.Net.CredentialCache.DefaultCredentials;
objService.AddUserToRole(strRole, string.Empty,
strUserLoginName, string.Empty, string.Empty);
//AddUserToRole(strRole, string.Empty, strUserLoginName,
string.Empty, string.Empty);
//remove from the other role, if applicable
string strOtherRole = "FieldReadOnly";
if (strRole.Equals("ReadOnly"))
{
strOtherRole = "ReadWrite";
}
bool blnUserInOtherRole = CheckIfUserIsInRole(strOtherRole,
strUserLoginName);
if (blnUserInOtherRole)
{
RemoveUserFromRole(strOtherRole, strUserLoginName);
}
}
protected override void CreateChildControls()
{
// Create btnAddToReadOnlyList control and wire its
event handler.
//btnAddToReadOnlyList = new HtmlButton();
//btnRemoveFromReadOnlyList = new HtmlButton();
//btnAddToReadWriteList = new HtmlButton();
//btnRemoveFromReadWriteList = new HtmlButton();
btnAddToReadOnlyList = new System.Web.UI.WebControls.Button();
btnRemoveFromReadOnlyList = new
System.Web.UI.WebControls.Button();
btnAddToReadWriteList = new System.Web.UI.WebControls.Button();
btnRemoveFromReadWriteList = new
System.Web.UI.WebControls.Button();
//lstReadOnlyUsers = new HtmlSelect();
//btnAddReadOnlyUsers = new System.Web.UI.WebControls.Button();
//btnAddReadOnlyUsers.Text = "Add to Read Only List -->";
lstReadOnlyUsers = new System.Web.UI.WebControls.ListBox();
//lstReadWriteUsers.ID = "READONLYLIST";
lstReadOnlyUsers.EnableViewState = false;
this.Controls.Add(lstReadOnlyUsers);
lstReadWriteUsers = new System.Web.UI.WebControls.ListBox();
//lstReadWriteUsers.ID = "READWRITELIST";
lstReadWriteUsers.EnableViewState = false;
this.Controls.Add(lstReadWriteUsers);
objPeopleEditor = new PeopleEditor();
objPeopleEditor.AllowEmpty = false;
objPeopleEditor.MultiSelect = true;
this.Controls.Add(objPeopleEditor);
//btnAddToReadOnlyList.InnerText = "+ Add to Read Only -->";
//btnAddToReadOnlyList.ServerClick += new
EventHandler(btnAddToReadOnlyList_click);
btnAddToReadOnlyList.ID = "ADDTOREADONLY";
btnAddToReadOnlyList.Text = "+ Add to Read Only -->";
btnAddToReadOnlyList.Click += new
EventHandler(this.btnAddToReadOnlyList_click);
this.Controls.Add(btnAddToReadOnlyList);
//btnRemoveFromReadOnlyList.InnerText = "X Remove";
//btnRemoveFromReadOnlyList.ServerClick += new
EventHandler(btnRemoveFromReadOnlyList_click);
btnRemoveFromReadOnlyList.ID = "REMOVEFROMREADONLY";
btnRemoveFromReadOnlyList.Text = "X Remove";
this.btnRemoveFromReadOnlyList.Click += new
EventHandler(this.btnRemoveFromReadOnlyList_click);
this.Controls.Add(btnRemoveFromReadOnlyList);
//btnAddToReadWriteList.InnerText = "+ Add to Read Write -->";
//btnAddToReadWriteList.ServerClick += new
EventHandler(btnAddToReadWriteList_click);
btnAddToReadWriteList.ID = "ADDTOREADWRITE";
btnAddToReadWriteList.Text = "+ Add to Read Write -->";
btnAddToReadWriteList.Click += new
EventHandler(this.btnAddToReadWriteList_click);
this.Controls.Add(btnAddToReadWriteList);
//btnRemoveFromReadWriteList.InnerText = "X Remove X";
//btnRemoveFromReadWriteList.ServerClick += new
EventHandler(btnRemoveFromReadWriteList_click);
btnRemoveFromReadWriteList.ID = "REMOVEFROMREADWRITE";
btnRemoveFromReadWriteList.Text= "X Remove X";
this.btnRemoveFromReadWriteList.Click += new
EventHandler(this.btnRemoveFromReadWriteList_click);
this.Controls.Add(btnRemoveFromReadWriteList);
//base.CreateChildControls();
LoadData();
strText += "LoadData called";
//base.CreateChildControls();
}
private void LoadData()
{
SPWeb objWeb =
SPControl.GetContextWeb(System.Web.HttpContext.Current);
UserGroup objService = new UserGroup();
objService.Url = objWeb.Url + "/_vti_bin/usergroup.asmx";
objService.Credentials =
System.Net.CredentialCache.DefaultCredentials;
XmlNode ndUsers =
objService.GetUserCollectionFromRole("ReadOnly");
XmlTextReader xr = new XmlTextReader(ndUsers.OuterXml,
XmlNodeType.Element, null);
System.Data.DataSet ds = new System.Data.DataSet();
ds.ReadXml(xr);
xr.Close();
lstReadOnlyUsers.DataTextField = "Name";
lstReadOnlyUsers.DataValueField = "LoginName";
lstReadOnlyUsers.DataSource = ds.Tables["User"] ;
lstReadOnlyUsers.DataBind();
ndUsers = objService.GetUserCollectionFromRole("ReadWrite");
xr = new XmlTextReader(ndUsers.OuterXml, XmlNodeType.Element,
null);
System.Data.DataSet ds1 = new System.Data.DataSet();
ds1.ReadXml(xr);
xr.Close();
lstReadWriteUsers.DataTextField = "Name";
lstReadWriteUsers.DataValueField = "LoginName";
lstReadWriteUsers.DataSource = ds1.Tables["User"];
lstReadWriteUsers.DataBind();
}
protected override void OnPreRender(EventArgs e)
{
base.OnPreRender(e);
}
protected override void RenderWebPart(HtmlTextWriter output)
{
LoadData();
this.EnsureChildControls();
//RenderChildren(output);
output.Write("<br>");
objPeopleEditor.RenderControl(output);
//begin
output.Write("<table>");
output.Write("<tr>");
output.Write("<td>");
btnAddToReadOnlyList.RenderControl(output);
output.Write("</td>");
output.Write("<td >");
lstReadOnlyUsers.RenderControl(output);
output.Write("</td>");
output.Write("<td >");
btnRemoveFromReadOnlyList.RenderControl(output);
output.Write("</td>");
output.Write("</tr>");
output.Write("<tr>");
output.Write("<td >");
btnAddToReadWriteList.RenderControl(output);
output.Write("</td>");
output.Write("<td >");
lstReadWriteUsers.RenderControl(output);
output.Write("</td>");
output.Write("<td >");
btnRemoveFromReadWriteList.RenderControl(output);
output.Write("</td>");
output.Write("</tr>");
output.Write("</table>");
output.Write("<BR>Debug Text:" +
SPEncode.HtmlEncode(strText));
}
}
}
am i missing something here.?
following is the code :