va2012
چهارشنبه 26 مهر 1391, 19:19 عصر
سلام دوستان.
من توی برنامم از یک treeview استفاده میکنم که تعداد نود های اصلی و یا فرزند اون بسته به خواسته کاربر نامحدود هست و میخوام ثبت و ویرایش و حذف نود ها هم داخل خود treeView صورت بگیره. حالا میخوام این نودها رو در دیتابیس SQL Server به ترتیب ذخیره و لود کنم. برای این کار سه تا فیلد NodeId - ParentId - NodeText در دیتابیس تعریف کردم و مشخصات هر نود رو در این فیلد ها ذخیره میکنم و هنگام لود با استفاده از یک تابع بازگشتی که با جستجو از همین سایت پیدا کردم نود ها رو نمایش میدم. . ولی مشکلی که وجود داره اینه که موقع ذخیره و لود اطلاعات - به اون شکل که باید عمل کنه نمیکنه. از XML هم نمیخوام استفاده کنم.
نمونه فایل رو هم ضمیمه کردم. اگر هم کسی نمونه برنامه ای در این مورد داره ممنون میشم اینجا قرار بده.
Catagory اسم جدول دیتابیس هست و tv1 نام کنترل tree View . برای نود هایی که Parent نداشته باشن هم ایندکس 1- رو ذخیره میکنم.
این نمونه کدهای برنامه :
private void Form1_Load_1(object sender, EventArgs e)
{
using (var contex = new DataBaseEntities())
{
tv1.Nodes.Clear();
var Node1 = contex.Catagories;
foreach (var m in Node1)
{
if (m.ParentID == -1)
{
TreeNode root = new TreeNode();
root.Text = m.NodeText;
tv1.Nodes.Add(root);
CreateNodesOfParent(m.NodeID, root);
}
}
}
}
public void CreateNodesOfParent(int ParentID, TreeNode root)
{
using (var contex = new DataBaseEntities())
{
Catagory x = new Catagory();
foreach (var i in contex.Catagories.Where(C => C.ParentID == ParentID))
{
TreeNode node = root.Nodes.Add(i.NodeText);
CreateNodesOfParent(i.NodeID, node);
}
}
}
private void toolStripButton4_Click(object sender, EventArgs e)
{
if (tv1.SelectedNode == null)
{
node = new TreeNode("گروه جدید");
node.ImageIndex = 16;
tv1.Nodes.Add(node);
node.BeginEdit();
}
else
{
node = new TreeNode("گروه جدید");
node.ImageIndex = 16;
tv1.SelectedNode.Nodes.Add(node);
node.BeginEdit();
}
}
private void tv1_AfterLabelEdit(object sender, NodeLabelEditEventArgs e)
{
using (var contex = new SourceCodeDataBaseEntities())
{
Catagory x = new Catagory();
x.NodeText = node.Text;
x.NodeID = node.Index;
x.ParentID = node.Parent.Index;
contex.AddToCatagories(x);
contex.SaveChanges();
}
}
من توی برنامم از یک treeview استفاده میکنم که تعداد نود های اصلی و یا فرزند اون بسته به خواسته کاربر نامحدود هست و میخوام ثبت و ویرایش و حذف نود ها هم داخل خود treeView صورت بگیره. حالا میخوام این نودها رو در دیتابیس SQL Server به ترتیب ذخیره و لود کنم. برای این کار سه تا فیلد NodeId - ParentId - NodeText در دیتابیس تعریف کردم و مشخصات هر نود رو در این فیلد ها ذخیره میکنم و هنگام لود با استفاده از یک تابع بازگشتی که با جستجو از همین سایت پیدا کردم نود ها رو نمایش میدم. . ولی مشکلی که وجود داره اینه که موقع ذخیره و لود اطلاعات - به اون شکل که باید عمل کنه نمیکنه. از XML هم نمیخوام استفاده کنم.
نمونه فایل رو هم ضمیمه کردم. اگر هم کسی نمونه برنامه ای در این مورد داره ممنون میشم اینجا قرار بده.
Catagory اسم جدول دیتابیس هست و tv1 نام کنترل tree View . برای نود هایی که Parent نداشته باشن هم ایندکس 1- رو ذخیره میکنم.
این نمونه کدهای برنامه :
private void Form1_Load_1(object sender, EventArgs e)
{
using (var contex = new DataBaseEntities())
{
tv1.Nodes.Clear();
var Node1 = contex.Catagories;
foreach (var m in Node1)
{
if (m.ParentID == -1)
{
TreeNode root = new TreeNode();
root.Text = m.NodeText;
tv1.Nodes.Add(root);
CreateNodesOfParent(m.NodeID, root);
}
}
}
}
public void CreateNodesOfParent(int ParentID, TreeNode root)
{
using (var contex = new DataBaseEntities())
{
Catagory x = new Catagory();
foreach (var i in contex.Catagories.Where(C => C.ParentID == ParentID))
{
TreeNode node = root.Nodes.Add(i.NodeText);
CreateNodesOfParent(i.NodeID, node);
}
}
}
private void toolStripButton4_Click(object sender, EventArgs e)
{
if (tv1.SelectedNode == null)
{
node = new TreeNode("گروه جدید");
node.ImageIndex = 16;
tv1.Nodes.Add(node);
node.BeginEdit();
}
else
{
node = new TreeNode("گروه جدید");
node.ImageIndex = 16;
tv1.SelectedNode.Nodes.Add(node);
node.BeginEdit();
}
}
private void tv1_AfterLabelEdit(object sender, NodeLabelEditEventArgs e)
{
using (var contex = new SourceCodeDataBaseEntities())
{
Catagory x = new Catagory();
x.NodeText = node.Text;
x.NodeID = node.Index;
x.ParentID = node.Parent.Index;
contex.AddToCatagories(x);
contex.SaveChanges();
}
}