wpf - Binding data to treeView c# -


i wish program worked this: 1.it takes data form ms sql 2.makes tree based on data(data rows) 3.i have few textboxex , want fill them data based on clicked node. i`ve made class sql connection:

 class baza {     private sqlconnection connection;     string dbdir = "data source=cs24\\sqlexpress;user id=sa;password=alamakota;database=sharp;connection timeout=3";     public baza()     {       connection = new sqlconnection();       connection.connectionstring = dbdir;       connection.open();     }     public datatable get_data(string q)      {         datatable dt = new datatable();          sqldatareader dr ;          sqlcommand sqlc = new sqlcommand(q);         sqlc.connection = this.connection;         dr = sqlc.executereader();         dt.load(dr);         return dt;     } } 

and treeview creator:

  private void form1_load(object sender, eventargs e)     {         baza baza = new baza();         datatable dt = new datatable();         dt = baza.get_data("select * users order id asc");         foreach (datarow dr in dt.rows)          {             treenode node = new treenode(dr["name"].tostring() + " " + dr["surname"].tostring());             treeview1.nodes.add(node);         }     } 

i thought node should have id can use make data filling dont know how it. can me that?

i had same trouble , did :

(i had hierarchical data in columns parentid, isgroup, orderingroup)

  • create class treeviewitems

     public class xtreeviewitem : inotifypropertychanged  {       public int id { get; set; }       public string header { get; set; }       public int parent;       public list<xtreeviewitem > children { get; set; }       public bool isgroup = false;       public bool parentresolved = false;       public float order {get;set;}        public void notifypropertychanged(string info)       {            if (propertychanged != null)            {                  propertychanged(this, new propertychangedeventargs(info));            }       }       public event propertychangedeventhandler propertychanged;  } 
  • now make list sql data

    private void loadtree() {     observablecollection<xtreeviewitem> treesource = new observablecollection<xtreeviewitem>();     list<xtreeviewitem> buffer = new list<xtreeviewitem>();     foreach (datarow row in table.rows)     {          xtreeviewitem itm = new treeviewitem();          // load required heirarchial data          buffer.add(itm);     }      (int = buffer.count - 1; >= 0; i--)     {         if (buffer[i].parentid != 0)         {             if (buffer[i].parentresolved)                 buffer.removeat(i);             else             {                 buffer[i].parentresolved = true;                  while (buffer.any(c => (c.parentid == buffer[i].menuid && !c.parentresolved)))                 {                     buffer[i].children.add(findchildren(buffer[i]));                 }                 xtreeviewitem parent = buffer.first(c => c.menuid == buffer[i].parentid);                 parent.children.add(buffer[i]);                 buffer[i].parent = parent;                  buffer.removeat(i);             }         }     }     // remaining items acts mainitems, add treesource     foreach (xtreeviewitem x in buffer)     {          treesource.add(x);     }     treeview.itemssource = treesource; }  xtreeviewitem findchildren(xmenuitem x) {     list<xtreeviewitem > subbuffer = buffer.where(c => (c.parentid == x.menuid && !c.parentresolved)).tolist(); // if there is, of them list      subbuffer = subbuffer.orderby(c => c.order).tolist();    // << crazy, fixes :p // order of them 'order' property     int indx = buffer.indexof(subbuffer[0]);                                                    // first item after ordering      buffer[indx].parentresolved = true;     buffer[indx].parent = x;                // changing parentresolved property prevent infinte loops      while (buffer.any(c => (c.parentid == buffer[indx].menuid && !c.parentresolved))) // again checking if current child got other child.     {         buffer[indx].children.add(findchildren(buffer[indx])); // adding childs                          }      return buffer[indx]; // return child  } 

in xaml : put treeview's itemtemplate :)

    <treeview.itemtemplate>           <hierarchicaldatatemplate itemssource="{binding children}">                   <contentpresenter content="{binding header}" margin="2,0"/>           </hierarchicaldatatemplate>      </treeview.itemtemplate> 

this did work me :p , selected item, use :

xtreeviewitem selecteditem = (xtreeviewitem)treeview.selecteditem; 

make view update 'selecteditem'; .. :)

hope helped :)

** items may appear reversed. give list.reverse(); in point so, havent run code myself, anyway should work types, loading menuitems database , desplaying (useful if have multiple languages) :)

** im 18 yrs old :p havent got degree in cs, code came :) yea there might flaws works me :p

:)


Comments

Popular posts from this blog

How to provide Authorization & Authentication using Asp.net, C#? -

toolbar - How to add link to user registration inside toobar in admin joomla 3 custom component -

How to use Authorization & Authentication in Asp.net, C#? -