none
C#:Treeview - добавление иконок RRS feed

  • Вопрос

  • Здравствуйте. Имеется treeview, сформированный из xml, представленный на рисунке. Как добавить 4 вида иконкок для отделов, бюро, должностей, сотрудников???

    7 апреля 2012 г. 9:45

Ответы

  • > Имеется treeview [...] Как добавить 4 вида иконкок для отделов, бюро, должностей, сотрудников?
     
     
    using System.Drawing;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication1
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                var lst = new ImageList();
                lst.Images.Add(Image.FromFile("1.png"));
                lst.Images.Add(Image.FromFile("2.png"));
                
                TreeView tv = new TreeView { Parent = this, Dock = DockStyle.Fill };
                tv.ImageList = lst;
                
                tv.Nodes.Add(new TreeNode { Text = "n1", ImageIndex = 0 });
                tv.Nodes.Add(new TreeNode { Text = "n2", ImageIndex = 1 });
            }
        }
    }
     
     
    • Помечено в качестве ответа Abolmasov Dmitry 9 апреля 2012 г. 5:28
    7 апреля 2012 г. 9:58

Все ответы

  • > Имеется treeview [...] Как добавить 4 вида иконкок для отделов, бюро, должностей, сотрудников?
     
     
    using System.Drawing;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication1
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                var lst = new ImageList();
                lst.Images.Add(Image.FromFile("1.png"));
                lst.Images.Add(Image.FromFile("2.png"));
                
                TreeView tv = new TreeView { Parent = this, Dock = DockStyle.Fill };
                tv.ImageList = lst;
                
                tv.Nodes.Add(new TreeNode { Text = "n1", ImageIndex = 0 });
                tv.Nodes.Add(new TreeNode { Text = "n2", ImageIndex = 1 });
            }
        }
    }
     
     
    • Помечено в качестве ответа Abolmasov Dmitry 9 апреля 2012 г. 5:28
    7 апреля 2012 г. 9:58
  • Спс, но как мне применить данное предложение для следующего кода? 

     private void Form1_Load(object sender, EventArgs e)
            {
                var xe = XElement.Load("d:\\staff_data\\Parse_xml.xml");
                Fill(treeView1.Nodes, xe.XPathSelectElement("//Department[Parent_Dept_Code='00000000']"));
            }
    
            void Fill(TreeNodeCollection nc, XElement xd)
            {
                Func<string, XElement> findTitle = code => xd.XPathSelectElement("//Title[Title_Code='" + code + "']");
                var dc = xd.Element("Dept_Code").Value;
                var nn = nc.Add(xd.Element("Short_Name1").Value);
                var rels =
                    from x in xd.XPathSelectElements("//Relation[Dept_Code1='" + dc + "']")
                    let position = findTitle(x.XPathSelectElement("Titles_Codes/Title_Code2[1]").Value )
                    let chief = findTitle(position.XPathSelectElement("Chief_Title_Codes/Title_Code1[1]").Value)
                    select new
                    {
                        Person = x.XPathSelectElement("//Staff[Personal_Number='" + x.Element("Personal_Number1").Value + "']"),
                        Position = position,
                        Chief = chief
                    };
                var details =
                    from x in rels
                    select new
                    {
                        LastName = x.Person.Element("LName").Value,
                        FirstName = string.Concat(x.Person.Element("FName").Value, " ", x.Person.Element("MName").Value),
                        Title = x.Position.Element("Short_Name").Value,
                        Number = x.Person.Element("Personal_Number").Value,
                    };
                foreach (var x in details.GroupBy(d => d.Title))
                {
                    var tn = nn.Nodes.Add(x.Key);
                    foreach (var p in x.OrderBy(n => n.LastName))
                        tn.Nodes.Add(new Person { Text = p.LastName + " " + p.FirstName, FamilyName = p.LastName, PersonalNumber = p.Number});
                }
                foreach (var s in xd.XPathSelectElements("//Department[Parent_Dept_Code='" + dc + "']"))
                    Fill(nn.Nodes, s);          
            }

    7 апреля 2012 г. 13:24
  • > Спс, но как мне применить данное предложение для следующего кода?
     
     
    надо добавить примерно следующее:
     

    enum NodeType
    {
      отдел,
      бюро,
      должность,
      сотрудник,
    }
    
    void Fill(TreeNodeCollection nc, XElement xd)
    {  
      ...  
      var tn = nn.Nodes.Add(x.Key);
      tn.ImageIndex = (int) GetNodeType(xd);
      ...
    }
    
    NodeType GetNodeType(XElement xe)
    {
      ... на основе данных в xe определить и вернуть тип узла
    }
    

    7 апреля 2012 г. 14:47
  • на основе данных в xe определить и вернуть тип узла.

    Как это сделать?

    9 апреля 2012 г. 7:33
  • > на основе данных в xe определить и вернуть тип узла. Как это сделать?


    в названии проверяйте наличие слов "отдел", "бюро".
    если нет, то остается либо должность, либо фио.
    в строке: var tn = nn.Nodes.Add(x.Key); -- должность.
    в строке: tn.Nodes.Add(...) -- фио.
     
     
    9 апреля 2012 г. 17:37
  • Каким образом это осуществить? Не могу ни как разобраться, а очень нужно...
    Приведите, пожалуйста, пример кода для решения задачи.
    • Изменено vantur 5 мая 2012 г. 23:15
    9 апреля 2012 г. 21:59