1 ضمیمه
اطلاعات جدول در صورت وجود در TREEVIEW نود مربوطه تیک بخورد
با سلام به همه دوستان
دوتا جدول دارم در یکیش ی سری اطلاعات درونش است و جدول دیگری که آیتم های آن به انتخاب کاربر از بین جدول اولی انتخاب شده را درون جدول دومی ریخته میشه+شماره شناسایی مشتری......
حالا میخام توی برنامه وقتی بروی نام مشتری که درون دیتا گرید است کلیک بشه براساس شماره شناسایی مشتری، آیتم هایی که درون جدول دومی می باشد را درtreeview تیک بزند....(treeview ازجدول اولی پر شده) .....
ساختارجدول بصورت عکس زیر است.....
ضمیمه 145265
یک پروژه قبلا داشتم برای حق دسترسی بود دقیقا همین کارا میکرد و از کدهای اونم استفاده کردم(کدهای زیر)ولی عمل نمیکنه و خطای خالی بودن پارامترها را میده.....
void UserPermissions(int userID)
{
OleDbConnection connection = new OleDbConnection();
connection.ConnectionString = _ConnectionString;
OleDbCommand command =new OleDbCommand(@"SELECT * FROM tbl_Users_Persmissions WHERE id_user=@UserID AND permissionID=@PermissionID", connection);
command.Parameters.Add(new OleDbParameter("@UserID", 0));
command.Parameters.Add(new OleDbParameter("@PermissionID",0));
connection.Open();
foreach (TreeNode node in TREENODE.NODES)
{
command.Parameters["@UserID"].Value = userID;
command.Parameters["@PermissionID"].Value = node;
using (OleDbDataReader dr = command.ExecuteReader())
{
if (dr.HasRows)
{
node.Checked = true;
}
}
foreach (TreeNode childNode in node.Parent.Parent.Nodes)
{
command.Parameters["@UserID"].Value = userID;
command.Parameters["@PermissionID"].Value = childNode;
using (OleDbDataReader dr = command.ExecuteReader())
{
if (dr.HasRows)
{
childNode.Checked = true;
}
}
}
}
connection.Close();
}
نیاز به راهنمایی هاتون دارم..
ممنون از همگی
نقل قول: اطلاعات جدول در صورت وجود در TREEVIEW نود مربوطه تیک بخورد
شما به ازای هر نود یک بار کوئری میزنید؟! درسته؟ و چطور treeview را پر میکنید؟
نقل قول: اطلاعات جدول در صورت وجود در TREEVIEW نود مربوطه تیک بخورد
به ازای هرcid که parentid آن 0باشد یک کوئری میزنم ومیریزم توی datatable و ستون دیتا تیبل را میریزم توی نود تعریف شده.....و همین کار را برای parentid هایی که برابر با cdi است باز ی کوئری میزنم ومیریزم توی دیتا تیبل و مجدد ستون دیتاتیبل را در نود تعریف شده میریزم..
نقل قول: اطلاعات جدول در صورت وجود در TREEVIEW نود مربوطه تیک بخورد
کد پر کردن treeview رو نزاشتید که بتونم کمک کنم.
اما بدونید که پراپرتی Nodes از treeview (نوع TreeNodeCollection) متدی به نام Find داره که برای پیدا کردن گره میشه ازش استفاده کرد. برای استفاده از این متد نیاز به یک کلید (Key) دارید که همان مشخصه Name از TreeNode هست.
در زمان ایجاد گره(پر کردن treeview) ، اطلاعات رو از جدول دریافت و CID رو به Name و Title رو به Text گره نسبت بدید.(برای پر کردن treeview یک کوئری کافیست)
متد UserPermissions را به اینصورت اصلاح کنید که فقط یک کوئری روی جدول بزنید و تمام CIDهایی را که برای شخص مورد نظر هست بدست بیارید و در یک دیتاتیبل بریزید. روی سطرهای دیتاتیبل پیمایش کنید و به ازای هر CID متد Find رو استفاده کنید و گره رو بدست بیارید و تیک بزنید.
نقل قول: اطلاعات جدول در صورت وجود در TREEVIEW نود مربوطه تیک بخورد
سلام مجدد
ببخشید من صبح به سیستم دسترسی نداشتم .......
کدهای مربوط به پرکردن treeview
TreeNode nodParent,nodChild,nodSubchild;
DataTable dt_parent, dt_Child,dt_subchild;
dt_parent = db.dataTableSelect(@"SELECT * FROM tbl_Permisstions WHERE ParentId=0" );
for(int i=0;i < dt_parent.Rows.Count;i++)
{
nodParent = new TreeNode(dt_parent.Rows[i][0].ToString()+"-"+ dt_parent.Rows[i][1].ToString());
dt_Child = db.dataTableSelect(@"SELECT * FROM tbl_Permisstions WHERE ParentId=" + dt_parent.Rows[i][0]);
for (int j = 0; j < dt_Child.Rows.Count; j++)
{
nodChild = new TreeNode(dt_Child.Rows[j][0].ToString() + "-" + dt_Child.Rows[j][1].ToString());
nodParent.Nodes.Add(nodChild);
dt_subchild = db.dataTableSelect(@"SELECT * FROM tbl_Permisstions WHERE ParentId=" + dt_Child.Rows[j][0]);
for (int s = 0; s < dt_subchild.Rows.Count; s++)
{
nodSubchild = new TreeNode(dt_subchild.Rows[s][0].ToString() + "-" + dt_subchild.Rows[s][1].ToString());
nodChild.Nodes.Add(nodSubchild);
}
}
treeView1.Nodes.Add(nodParent);
}
نقل قول: اطلاعات جدول در صورت وجود در TREEVIEW نود مربوطه تیک بخورد
کد
پرکردن treeview را اینجوری اصلاح کردم....
dt_parent = db.dataTableSelect(@"SELECT * FROM tbl_Permisstions WHERE ParentId=0");
nodParent = new TreeNode();
for (int i = 0; i < dt_parent.Rows.Count; i++)
{
nodParent.Name = dt_parent.Rows[i][0].ToString();
nodParent.Text = dt_parent.Rows[i][1].ToString();
nodParent = new TreeNode(dt_parent.Rows[i][0].ToString() + "-" + dt_parent.Rows[i][1].ToString());
dt_Child = db.dataTableSelect(@"SELECT * FROM tbl_Permisstions WHERE ParentId=" + dt_parent.Rows[i][0]);
for (int j = 0; j < dt_Child.Rows.Count; j++)
{
nodChild = new TreeNode(dt_Child.Rows[j][0].ToString() + "-" + dt_Child.Rows[j][1].ToString());
nodParent.Nodes.Add(nodChild);
dt_subchild = db.dataTableSelect(@"SELECT * FROM tbl_Permisstions WHERE ParentId=" + dt_Child.Rows[j][0]);
for (int s = 0; s < dt_subchild.Rows.Count; s++)
{
nodSubchild = new TreeNode(dt_subchild.Rows[s][0].ToString() + "-" + dt_subchild.Rows[s][1].ToString());
nodChild.Nodes.Add(nodSubchild);
}
}
treeView1.Nodes.Add(nodParent);
}
و متد userpermission را هم طبق گفته هاتون؛بسری هاشو فهمیدم نوشتم ولی key را نمیدونم چی بنویسم
DataTable dt = db.dataTableSelect(@"SELECT permissionID FROM tbl_Users_Persmissions WHERE id_user=" + userID);
foreach (DataRow rr in dt.Rows)
{
treeView1.Nodes.Find(؟؟؟, true);
}
این کدهام،محبت میکنید چک کنید ببینید درسته یا نه؟
ممنون
نقل قول: اطلاعات جدول در صورت وجود در TREEVIEW نود مربوطه تیک بخورد
فرض:
جدولی به نام tbl_Permisstions با ستونهای PermissionId و Title و ParentId
و tbl_Users_Permissions با ستونهای id و PermissionId و UserId
کد پر کردن treeview رو به اینصورت اصلاح کنید (کوئری را برحسب parentId به صورت صعودی مرتب کنید و به ترتیب شروع به ساخت گره ها کنید)
DataTable allPermissions = db.dataTableSelect(
@"select PermissionId, Title, ParentId
from tbl_Permisstions
where ParentId = 0 OR ParentId in (select PermissionId from tbl_Permisstions)
order by ParentId");
for (var i = 0; i < allPermissions.Rows.Count; i++)
{
DataRow dtRow = allPermissions.Rows[i];
string permissionId = Convert.ToString(dtRow["PermissionId"]);
string permissionTitle = Convert.ToString(dtRow["Title"]);
string permissionParentId = Convert.ToString(dtRow["ParentId"]);
TreeNode node = new TreeNode
{
Text = permissionTitle,
Name = permissionId
};
if (permissionParentId == "0")
{
treeView1.Nodes.Add(node);
}
else
{
TreeNode[] parentNodes = treeView1.Nodes.Find(permissionParentId, true);
if (parentNodes.Length > 0)
{
parentNodes[0].Nodes.Add(node);
}
}
}
برای تیک زدن سطح دسترسی هر شخص به صورت زیر
DataTable dt = db.dataTableSelect(@"SELECT permissionID FROM tbl_Users_Persmissions WHERE id_user=" + userID);
foreach (DataRow row in dt.Rows)
{
string permissionID = Convert.ToString(row["permissionID"]);
TreeNode[] nodes = treeView1.Nodes.Find(permissionID, true);
if (nodes.Length > 0)
{
nodes[0].Checked = true;
}
}