Please start any new threads on our new
site at https://forums.sqlteam.com. We've got lots of great SQL Server
experts to answer whatever question you can come up with.
Author |
Topic |
durban
7 Posts |
Posted - 2007-01-05 : 15:14:23
|
I just wanted to share my version of a treeview with the people who have helped me.It only requires returning the recordID and a parent recordID field.using System;using System.Data;using System.Configuration;using System.Collections;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Web.UI.HtmlControls;using System.Data.SqlClient;using System.Text;using System.Web.UI.HtmlControls;using Com.Commerce.DomainUsers;public partial class rd_addOrEdit_grouplist : System.Web.UI.Page{String userName = "";String msg = "";String ListOwnerRoles = "";protected void Page_Load(object sender, EventArgs e){Master.Page.Title = "Kansas Resources Directory - Add or Edit Group List";GetAuth();if ((msg != null)){Session["errmsg"] = msg;Response.Redirect("Default.aspx");}else{DomainUserInfo userInfo = new DomainUserInfo();userName = userInfo.GetLongLogInUserName();}if (Session["currRolesString"] != null){ListOwnerRoles = Session["currRolesString"].ToString();}{if (!IsPostBack)PopulateNodes();}}void PopulateNodes(){DataTable groupList = GetTreeViewData();DataView parent = GetParents(groupList);foreach (DataRowView row in parent){TreeNode parentNode = new TreeNode();parentNode.Text = row["ListTitle"].ToString();//IF owned by user, can be editedif (row["ListOwner"].ToString() == userName){parentNode.NavigateUrl = "rd_edit_existing_list.aspx?GroupListID=" + row["ListID"].ToString();}parentNode.Value = row["ListID"].ToString();TreeView1.Nodes.Add(parentNode);Addchild(groupList, parentNode);}}DataTable GetTreeViewData(){string connString1 = ConfigurationManager.ConnectionStrings["CommerceCustomersConnectionString"].ConnectionString;SqlConnection conn = new SqlConnection(connString1);SqlDataAdapter dalist = new SqlDataAdapter();SqlCommand sqlcmd = new SqlCommand("treeViewDefaultDir", conn);sqlcmd.CommandType = CommandType.StoredProcedure;sqlcmd.Parameters.AddWithValue("@ListOwner", userName);sqlcmd.Parameters.AddWithValue("@Roles", ListOwnerRoles);dalist.SelectCommand = sqlcmd;//Get all the records which belong to user or//which are shared by the owner and the user has that role// find shared lists who's parent is not present in the selected // records and set the parent to 0DataSet groupDataSet = new DataSet();dalist.Fill(groupDataSet, "groups");foreach (DataRow outerLoop in groupDataSet.Tables["groups"].Rows){String flag = "0";foreach (DataRow innerLoop in groupDataSet.Tables["groups"].Rows){if (outerLoop[2].ToString() == innerLoop[0].ToString()) // innerLoop[2] parentID outerLoop[0] listID{flag = "1"; // if there is a parent in the list, exitbreak;}}if (flag == "0"){outerLoop[2] = 0;}} DataTable dtbl = groupDataSet.Tables["groups"];//DataTable dtbl = new DataTable();//dalist.Fill(dtbl);return dtbl;}DataView GetParents(DataTable dupParentID){DataView view = new DataView(dupParentID);view.RowFilter = "ListParent=0";return view;}void Addchild(DataTable groupList, TreeNode node){DataView child = Getchild(groupList, node.Value);foreach (DataRowView row in child){TreeNode childNode = new TreeNode();childNode.Text = row["ListTitle"].ToString();if (row["ListOwner"].ToString() == userName){childNode.NavigateUrl = "rd_edit_existing_list.aspx?GroupListID=" + row["ListID"].ToString();}childNode.Value = row["ListID"].ToString();node.ChildNodes.Add(childNode);//See if there are children of this childAddchild(groupList, childNode);}}DataView Getchild(DataTable groupList, string ID){DataView view = new DataView(groupList);view.RowFilter = "ListParent=" + ID;return view;}protected void GetAuth(){AuthUser oiGet = new AuthUser();msg = oiGet.xMsg;}}The SQL:ALTER PROCEDURE dbo.treeViewDefaultDir@ListOwner varchar(200),@Roles varchar(2000)ASSELECT Distinct ListID, ListTitle, ListParent,ListOwnerFROM GroupListWHERE (ListID IN(SELECT ListReferencedIDFROM GroupListSharesWHERE (PATINDEX(('%,' + (substring(SecurityGroupReferenceID,1,(charindex('\',SecurityGroupReferenceID)-1))+SUBSTRING(SecurityGroupReferenceID, charindex('\',SecurityGroupReferenceID) +1, len(SecurityGroupReferenceID)))+ ',%'), (','+@Roles+',')) > 0)OR ListOwner = @ListOwner))ORDER BY ListTitleRETURNThe SecurityGroupReferenceID contains a "\" in the middle of it which SQL Server doesn't like. It will actually double the amount of "\" you have in the field in the return set.Thanks to all |
|
|
|
|
|
|