PDA

View Full Version : نمایش اطلاعات XML در TreeView با LINQ و برعکس



13601360
شنبه 04 خرداد 1392, 08:20 صبح
سلام دوستان
اگر امکان دارد نمونه کدی ساده ای
برای نمایش اطلاعات فایل XML مثل پایین

<?xml version="1.0" encoding="utf-8"?>
<factors>
<factor number="1" price="1000">
<code>12</code>
<group>A</group>
</factor>
</factors>
در TreeView کنترل با استفاده از Linq To XML
و البته برعکس اون یعنی
ذخیره اطلاعات TreeView در فایل XML با Linq
معرفی کنید
با سپاس

Mahmoud.Afrad
شنبه 04 خرداد 1392, 10:29 صبح
اولا بگم اگر نفهمید چی به چیه کپی پیست کردن به هیچ دردی نمیخوره. پس در مورد توابع بازگشتی اطلاعات کسب کنید.

با اینکه قبلا بحث شده ولی کد زیر توسط LinqToXML هست.

از طریق متد SaveTreeView با دادن آدرس فایل و شئ treeview میتونید سیو کنید. در متد CreateElement میتونید هر چیزی از نود را که نیاز دارید به صورت Attribute ذخیره کنید.

private void SaveTreeView(TreeView treeView, string filePath)
{
XElement rootElement = new XElement("Root");

foreach (TreeNode mainNode in treeView.Nodes)
{
XElement childElement = CreateElement(mainNode);
rootElement.Add(childElement);
AddChildElement(mainNode, childElement);
}

rootElement.Save(filePath);
}
private void AddChildElement(TreeNode treeNode, XElement element)
{
foreach (TreeNode childNode in treeNode.Nodes)
{
XElement childElement = CreateElement(childNode);
element.Add(childElement);
if (childNode.Nodes.Count > 0)
{
AddChildElement(childNode, childElement);
}
}
}
private XElement CreateElement(TreeNode treeNode)
{
return new XElement(treeNode.Name,
new XAttribute("Text", treeNode.Text),
new XAttribute("Checked", treeNode.Checked),
new XAttribute("ImageIndex", treeNode.ImageIndex),
new XAttribute("ToolTipText", treeNode.ToolTipText)
);
}


از متد LoadTreeView هم میتونید لود کنید. در متد CreateTreeNode همه ویژگی هایی که ذخیره کردید را بخوانید و در نود قرار بدید:

private void LoadTreeView(string filePath, TreeView treeView)
{
XElement rootElement;
try
{
rootElement = XElement.Load(filePath);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
return;
}

List<TreeNode> nodeLst = new List<TreeNode>();
foreach (XElement mainElement in rootElement.Elements())
{
TreeNode tn = CreateTreeNode(mainElement);
AddChildTreeNode(mainElement, tn);
nodeLst.Add(tn);
}
treeView.Nodes.AddRange(nodeLst.ToArray());
}
private void AddChildTreeNode(XElement element, TreeNode treeNode)
{
foreach (XElement childElement in element.Elements())
{
TreeNode tn = CreateTreeNode(childElement);
AddChildTreeNode(childElement, tn);
treeNode.Nodes.Add(tn);
}
}
private TreeNode CreateTreeNode(XElement mainElement)
{
TreeNode tn = new TreeNode();
tn.Name = mainElement.Name.LocalName;
tn.Text = mainElement.Attribute("Text").Value;
tn.Checked = Convert.ToBoolean(mainElement.Attribute("Checked").Value);
tn.ImageIndex = Convert.ToInt32(mainElement.Attribute("ImageIndex").Value);
tn.ToolTipText = mainElement.Attribute("ToolTipText").Value;
return tn;
}