Solved

Help needed with treeview methode AfterSelect

Posted on 2011-03-13
14
463 Views
Last Modified: 2013-12-17
Hi,

I have a treeview and a textbox on the form that is devided with a splitter.
The nodes in the treeview are loaded and saved to/from a database. Every
node is associated with a row of a database. I have add a new column called
Data. This is for the textbox. So when a user clicks on a node of a treeview
and put text in the textbox, the data in the textbox will be saved to the data-
base also. Who can help me with this? I know I have to use the treeview-event
AfterSelect. But I don't get further than this:

        private void tvNotes_AfterSelect(object sender, TreeViewEventArgs e)
        {
            TextBox1.Text = ?????
        }

I have put all the code in the code-section, because I have no idea what is
relevant. I hope someone can help me?

Peter Kiers


private ContextMenu tvSampleMenu = new ContextMenu();
        private const string ImageIndexColumnName = "ImageIndex";
        private const string SelectedImageIndexColumnName = "SelectedImageIndex";
        private const string SortOrderColumnName = "SortOrder";
        private string DBName = "";
        private string DBConStr = "";

        public MainForm()
        {
            InitializeComponent();
        }
        //*----------------------------------------------------------*//
        private void MainForm_Load(object sender, EventArgs e)
	    {
         try
         {
        DBName = Application.StartupPath + @"\DBRoot.mdb";
        DBConStr = @"Provider=Microsoft.Jet.OLEDB.4.0;Password="""";Data Source=" + DBName +";";
        tvSampleMenu.MenuItems.Add("Add Folder", new EventHandler(tvSampleRightClickInsFolder));
        tvSampleMenu.MenuItems.Add("Add Item", new EventHandler(tvSampleRightClickInsItem));
        tvSampleMenu.MenuItems.Add("Edit", new EventHandler(tvSampleRightClickEdit));
        tvSampleMenu.MenuItems.Add("Delete",new EventHandler(tvSampleRightClickDelete));
        LoadTree(tvNotes, GetHierarchy(DBConStr, 1));
           }
       catch (Exception err) 
         {  
           MessageBox.Show(err.Message);
         }
	    }
        //*----------------------------------------------------------*//
        private void LoadTree(TreeView tv, DataSet ds)
        {
            try
            {
                LoadFromDataSet(tv, ds, "Description");
                if (tv.Nodes.Count > 0)
                {
                    tv.Nodes[0].Expand();
                }
            }
            catch (Exception) 
            { 
                throw; 
            }
        }
        //*----------------------------------------------------------*//
        public static DataSet GetHierarchy(string connectionString, int modelID)
        {
            string sql = "";
            DataSet ds = null;
            try
            {
                sql = "select * from hierarchy ";
                sql += "  where modelid=" + modelID.ToString();
                sql += "  order by parentnodeid,sortorder asc";
                ds = GetDataSet(connectionString, sql);
                SetHierarchyRelationships(ds);
            }
            catch (Exception) { throw; }
            return ds;
        }
        //*----------------------------------------------------------*//
        public static void SetHierarchyRelationships(DataSet ds)
        {
            DataColumn fk;
            DataColumn[] pk = new DataColumn[1];
            ForeignKeyConstraint fkcdelete;
            DataRelation relation;
            string datarelationname = "ParentChild";
            try
            {
                ds.Tables[0].TableName = "Hierarchy";
                pk[0] = ds.Tables[0].Columns["NodeID"];
                fk = ds.Tables[0].Columns["ParentNodeID"];
                ds.Tables[0].PrimaryKey = pk;
                fkcdelete = new ForeignKeyConstraint(pk[0], fk);
                fkcdelete.DeleteRule = Rule.Cascade;
                relation = new DataRelation(datarelationname, pk[0], fk, false);
                ds.Tables[0].Constraints.Add(fkcdelete);
                ds.Tables[0].AcceptChanges();
                ds.Relations.Add(relation);
            }
            catch (Exception) { throw; }
            return;
        }
        //*----------------------------------------------------------*//
        public static bool CommitHierarchy(string connectionString, DataSet ds)
        {
            string sql = "";
            bool ret = false;
            int ModelID = 0;
            DataTable dt;
            try
            {
                if (ds.Tables.Count < 1) { return ret; }
                dt = ds.Tables[0];
                ModelID = int.Parse(dt.Rows[0]["ModelID"].ToString());
                sql = "select  * from Hierarchy where ModelID = " + ModelID.ToString();
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    if (dt.Rows[i].RowState.ToString() == "Deleted") { continue; }
                    if (int.Parse(dt.Rows[i]["ModelID"].ToString()) != ModelID)
                    {
                        dt.Rows[i]["ModelID"] = ModelID;
                    }
                }
                CommitToDataBase(connectionString, ds, sql);
                ret = true;
            }
            catch (Exception e)
            {
                //Debug.WriteLine(e.Message);
                throw;
            }
            return ret;
        }
        //*----------------------------------------------------------*//
        public static void CommitToDataBase(string connectionString, DataSet ds, string sql)
        {
            try
            {
                if (!ds.HasChanges()) { return; }
                using (OleDbConnection conn = new OleDbConnection())
                {
                    conn.ConnectionString = connectionString;
                    conn.Open();
                    using (OleDbDataAdapter da = new OleDbDataAdapter(sql, conn))
                    {
                        OleDbCommandBuilder b = new OleDbCommandBuilder(da);
                        da.Update(ds.Tables[0]);
                        ds.AcceptChanges();
                    }
                }
            }
            catch (Exception) { throw; }
        }
        //*----------------------------------------------------------*//
        public static DataSet GetDataSet(string connectionString, string sql)
        {
            DataSet ds = new DataSet();
            try
            {
                using (OleDbConnection conn = new OleDbConnection())
                {
                    conn.ConnectionString = connectionString;
                    conn.Open();
                    using (OleDbDataAdapter da = new OleDbDataAdapter(sql, conn))
                    {
                        da.Fill(ds);
                    }
                }
            }
            catch (Exception) { throw; }
            return ds;
        }        
        //*----------------------------------------------------------*//
        private void tvNotes_AfterLabelEdit(object sender, NodeLabelEditEventArgs e)
        {
            try
            {
                if (e.Label.Trim().Length < 1) { e.CancelEdit = true; }
                EditNode(tvNotes.SelectedNode, e.Label);
                tvNotes.SelectedNode.EndEdit(false);
                tvNotes.LabelEdit = false;
            }
            catch (Exception err) 
            { 
                MessageBox.Show(err.Message);
            }
        }
        //*----------------------------------------------------------*//
        private void tbAccChan_Click(object sender, EventArgs e)
        {
            DataRow row = null;
            try
            {
                if (tvNotes.Nodes.Count == 0) { return; }
                row = (DataRow)tvNotes.Nodes[0].Tag;
                CommitHierarchy(DBConStr, row.Table.DataSet);
            }
            catch (Exception err)
            { 
                MessageBox.Show(err.Message);
            }
        }
        //*----------------------------------------------------------*//
        private void InsertNewFolder(TreeNode node)
        {
         DataRow row = null;
         DataRow ParentRow = null;
         DataTable dt = null;
         int newindex = 0;
         try
         {
             ParentRow = (DataRow)node.Tag; 
             if (ParentRow == null) { return; }
             newindex = int.Parse(ParentRow["SortOrder"].ToString()) + 1;
             dt = ParentRow.Table;
             row = dt.NewRow();
             row["ModelID"] = int.Parse(ParentRow["ModelID"].ToString());
			 row["NodeID"] = Guid.NewGuid().ToString();
			 row["ParentNodeID"] = ParentRow[dt.PrimaryKey[0].ColumnName].ToString();
             row["Description"] = "New Node";
			 row["ImageIndex"] = 1;
			 row["SelectedImageIndex"] = 2;
             row["SortOrder"] = newindex;
             dt.Rows.Add(row);
             TreeNode newNode = GetTreeNodeFromDataRow(row, "Description");
             node.Nodes.Add(newNode);
             tvNotes.SelectedNode = newNode; 
         }
         catch (Exception) 
		 {
			 throw;
		 }

      }
        //*----------------------------------------------------------*//
        private void InsertNewItem(TreeNode node)
        {
            DataRow row = null;
            DataRow ParentRow = null;
            DataTable dt = null;
            int newindex = 0;
            try
            {
                ParentRow = (DataRow)node.Tag;
                if (ParentRow == null) { return; }
                newindex = int.Parse(ParentRow["SortOrder"].ToString()) + 1;
                dt = ParentRow.Table;
                row = dt.NewRow();
                row["ModelID"] = int.Parse(ParentRow["ModelID"].ToString());
                row["NodeID"] = Guid.NewGuid().ToString();
                row["ParentNodeID"] = ParentRow[dt.PrimaryKey[0].ColumnName].ToString();
                row["Description"] = "New Node";
                row["ImageIndex"] = 3;
                row["SelectedImageIndex"] = 3;
                row["SortOrder"] = newindex;
                dt.Rows.Add(row);
                TreeNode newNode = GetTreeNodeFromDataRow(row, "Description");
                node.Nodes.Add(newNode);
                tvNotes.SelectedNode = newNode;
            }
            catch (Exception)
            {
                throw;
            }

        }
       //*----------------------------------------------------------*//
        private void EditNode(TreeNode node, string newText)
        {
            DataRow row = null;
            try
            {
                if (node == null) { return; }
                if (node == tvNotes.Nodes[0]) { return; }
                row = (DataRow)node.Tag;
                if (row == null)
                {
                    return;
                }
                row["Description"] = newText;
            }
            catch (Exception) { throw; }
        }
        //*----------------------------------------------------------*//
        public static void SetSelectedNodeByPosition(TreeView tv, int mouseX, int mouseY)
        {
            TreeNode node = null;
            try
            {
                Point pt = new Point(mouseX, mouseY);
                tv.PointToClient(pt);
                node = tv.GetNodeAt(pt);
                tv.SelectedNode = node;
                if (node == null) return;
                if (!node.Bounds.Contains(pt)) { return; }
            }
            catch { }
            return;
        }
        //*----------------------------------------------------------*//
        public static void LoadFromDataSet(TreeView tv, DataSet ds, string textColumnName)
        {
            TreeNode node;
            DataRow row;
            try
            {
                tv.Nodes.Clear();
                if (ds.Tables.Count < 1) { return; }
                if (ds.Tables[0].Rows.Count < 1) { return; }
                string fkcolumnname = FindForeignKeyColumnName(ds.Tables[0]);
                row = ds.Tables[0].Rows[0];
                tv.BeginUpdate();
                node = GetTreeNodeFromDataRow(row, textColumnName);
                tv.Nodes.Add(node);
                AddNodeFromDataRow(node, row, textColumnName, FindForeignKeyRelationName(row.Table));
            }
            catch (Exception) { throw; }
            finally
            {
                tv.EndUpdate();
                ds.AcceptChanges();
            }
        }
        //*----------------------------------------------------------*//
        public static void AddNodeFromDataRow(TreeNode parentNode, DataRow row, string textColumnName, string dataRelationName)
        {
            try
            {
                foreach (DataRow childrow in row.GetChildRows(dataRelationName))
                {
                    parentNode.Nodes.Add(GetTreeNodeFromDataRow(childrow, textColumnName));
                    AddNodeFromDataRow(parentNode.LastNode, childrow, textColumnName, dataRelationName);
                }
            }
            catch (Exception) { throw; }
        }
        //*----------------------------------------------------------*//
        public static TreeNode GetTreeNodeFromDataRow(DataRow row, string textColumnName)
        {
            TreeNode child = null;
            string imageidx = "";
            string selimageidx = "";
            try
            {
                if (row.Table.Columns.Contains(ImageIndexColumnName))
                {
                    imageidx = row[ImageIndexColumnName].ToString();
                }
                if (row.Table.Columns.Contains(SelectedImageIndexColumnName))
                {
                    selimageidx = row[SelectedImageIndexColumnName].ToString();
                }
                child = new TreeNode();
                child.Text = row[textColumnName].ToString().Trim();
                if (imageidx.Length > 0)
                {
                    child.ImageIndex = Convert.ToInt32(imageidx);
                }
                if (selimageidx.Length > 0)
                {
                    child.SelectedImageIndex = Convert.ToInt32(selimageidx);
                }
                child.Tag = row;
            }
            catch (Exception) { throw; }
            return child;
        }
        //*----------------------------------------------------------*//
        public static void DeleteNode(TreeView tv)
        {
            DataRow row;
            try
            {
                if (tv.SelectedNode == null) { return; }
                if (tv.SelectedNode == tv.Nodes[0]) { return; }
                row = (DataRow)tv.SelectedNode.Tag;
                row.Delete();
                tv.SelectedNode.Remove();
            }
            catch (Exception) { throw; }
            return;
        }
        //*----------------------------------------------------------*//
        public static string FindForeignKeyColumnName(DataTable dt)
        {
            string Ret = "";
            try
            {
                DataSet ds = dt.DataSet;
                DataRelation rel = ds.Relations[0];
                Ret = rel.ChildColumns[0].ColumnName;
            }
            catch (Exception) { throw; }
            return Ret;
        }
        //*----------------------------------------------------------*//
        public static string FindForeignKeyRelationName(DataTable dt)
        {
            string Ret = "";
            try
            {
                DataSet ds = dt.DataSet;
                DataRelation rel = ds.Relations[0];
                Ret = rel.RelationName;
            }
            catch (Exception) { throw; }
            return Ret;
        }
        //*----------------------------------------------------------*// 
	}
}

Open in new window

0
Comment
Question by:peterkiers
  • 8
  • 6
14 Comments
 
LVL 96

Expert Comment

by:Bob Learned
Comment Utility
The TreeViewEventArgs gives you access to the TreeNode, like this:

    this.TextBox1.Text = e.Node.Text;

Open in new window

0
 
LVL 1

Author Comment

by:peterkiers
Comment Utility
Hi,

This i found from another example, it's not quit right, but i think it gives the right direction:

 private void treeDB_AfterSelect(object sender, System.Windows.Forms.TreeViewEventArgs e)
    {
       lblInfo.Text = DataClass.GetDisplayText((DataRow)e.Node.Tag);
    }

p.
0
 
LVL 96

Expert Comment

by:Bob Learned
Comment Utility
That would work, if you were storing an object in the TreeNode.Tag property.
0
 
LVL 1

Author Comment

by:peterkiers
Comment Utility
       private void tvNotes_AfterSelect(object sender, TreeViewEventArgs e)
        {

            DataRow row = null;
            textBox1.Text = (DataRow)tvNotes.Nodes[0].Tag;
        }

I get: Cannot implicitly convert type 'System.Data.DataRow' to 'string'      

P.
0
 
LVL 96

Accepted Solution

by:
Bob Learned earned 500 total points
Comment Utility
If you are storing a DataRow in the Tag property, you can access a column value like this example:

DataRow row = e.Node.Tag as DataRow;
this.textBox1.Text = row["MyData"].ToString();

Open in new window

0
 
LVL 1

Author Comment

by:peterkiers
Comment Utility
Allthou i get no errors its not working...

Peter
0
 
LVL 96

Expert Comment

by:Bob Learned
Comment Utility
Peter,

If what you have is not working, then I need more information.  Can you show me how you are creating TreeNodes?
0
How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

 
LVL 1

Author Comment

by:peterkiers
Comment Utility
This is the way nodes a be created:

        private void tvSampleRightClickInsFolder(object sender, System.EventArgs e)
        {
            try
            {
                TreeNode node = tvNotes.SelectedNode;
                if ((node == null) || (node.ImageIndex == 3)) { return; }
                InsertNewFolder(node);
            }
            catch (Exception err)
            {
                MessageBox.Show(err.Message);
            }
        }

private void InsertNewFolder(TreeNode node)
        {
         DataRow row = null;
         DataRow ParentRow = null;
         DataTable dt = null;
         int newindex = 0;
         try
         {
             ParentRow = (DataRow)node.Tag;
             if (ParentRow == null) { return; }
             newindex = int.Parse(ParentRow["SortOrder"].ToString()) + 1;
             dt = ParentRow.Table;
             row = dt.NewRow();
             row["ModelID"] = int.Parse(ParentRow["ModelID"].ToString());
                   row["NodeID"] = Guid.NewGuid().ToString();
                   row["ParentNodeID"] = ParentRow[dt.PrimaryKey[0].ColumnName].ToString();
             row["Description"] = "New Node";
                   row["ImageIndex"] = 1;
                   row["SelectedImageIndex"] = 2;
             row["SortOrder"] = newindex;
             dt.Rows.Add(row);
             TreeNode newNode = GetTreeNodeFromDataRow(row, "Description");
             node.Nodes.Add(newNode);
             tvNotes.SelectedNode = newNode;
         }
         catch (Exception)
             {
                   throw;
             }

      }

P.
0
 
LVL 1

Author Comment

by:peterkiers
Comment Utility
If I put data in de the column Data manually and start my application
the text will be shown in the texbox that is associated with the treeview
node. But the afterselect method does not work.

P.
0
 
LVL 96

Expert Comment

by:Bob Learned
Comment Utility
Peter,

I see where you are creating a new TreeNode here:

 TreeNode newNode = GetTreeNodeFromDataRow(row, "Description");

Open in new window


What I don't see is where you are setting the Tag property to the DataRow.  I would think you should have gotten an error accessing the TreeNode.Tag property, if it was null, unless you were looking at the wrong TreeNode.
0
 
LVL 1

Author Comment

by:peterkiers
Comment Utility
Sorry i forgot to mention a line that I have marked with an arrow.

P.
private void tvSampleRightClickInsFolder(object sender, System.EventArgs e)
        {
            try
            {
                TreeNode node = tvNotes.SelectedNode;
                if ((node == null) || (node.ImageIndex == 3)) { return; }
                InsertNewFolder(node);
            }
            catch (Exception err)
            {
                MessageBox.Show(err.Message);
            }
        }

private void InsertNewFolder(TreeNode node)
        {
         DataRow row = null;
         DataRow ParentRow = null;
         DataTable dt = null;
         int newindex = 0;
         try
         {
             ParentRow = (DataRow)node.Tag; 
             if (ParentRow == null) { return; }
             newindex = int.Parse(ParentRow["SortOrder"].ToString()) + 1;
             dt = ParentRow.Table;
             row = dt.NewRow();
             row["ModelID"] = int.Parse(ParentRow["ModelID"].ToString());
                   row["NodeID"] = Guid.NewGuid().ToString();
                   row["ParentNodeID"] = ParentRow[dt.PrimaryKey[0].ColumnName].ToString();
             row["Description"] = "New Node";
                   row["ImageIndex"] = 1;
                   row["SelectedImageIndex"] = 2;
             row["SortOrder"] = newindex;
             row["Data"] = textBox1.Text; <===============================
             dt.Rows.Add(row);
             TreeNode newNode = GetTreeNodeFromDataRow(row, "Description");
             node.Nodes.Add(newNode);
             tvNotes.SelectedNode = newNode; 
         }
         catch (Exception) 
             {
                   throw;
             }

      }

P.

Open in new window

0
 
LVL 1

Author Comment

by:peterkiers
Comment Utility
In this methode the data of the treeview nodes will be saved to a database:

        private void tbAccChan_Click(object sender, EventArgs e)
        {
            DataRow row = null;
            try
            {
                if (tvNotes.Nodes.Count == 0) { return; }
                row = (DataRow)tvNotes.Nodes[0].Tag;
                CommitHierarchy(DBConStr, row.Table.DataSet);
            }
            catch (Exception err)
            {
                MessageBox.Show(err.Message);
            }
        }
0
 
LVL 1

Author Comment

by:peterkiers
Comment Utility
Wait a minute I think i am thinking wrong:

When I put the data manually into the column Data of the database
and i start my application, the code of the afterselect event works
because I see in the textbox the text that I have put in the database.
So the problem is not the afterselect-event.

But the event that inserts the node into the database. Because I
don't understand the code that well I don't know what is relevant
to show in the code-section so I have put it all.

I really hope someone can help me?
P.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.OleDb;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;

namespace DbTreeView
{
    public partial class MainForm : Form
    {
        private ContextMenu tvSampleMenu = new ContextMenu();
        private const string ImageIndexColumnName = "ImageIndex";
        private const string SelectedImageIndexColumnName = "SelectedImageIndex";
        private const string SortOrderColumnName = "SortOrder";
        private string DBName = "";
        private string DBConStr = "";

        public MainForm()
        {
            InitializeComponent();
        }
        //*----------------------------------------------------------*//
        private void MainForm_Load(object sender, EventArgs e)
	    {
         try
         {
        DBName = Application.StartupPath + @"\DBRoot.mdb";
        DBConStr = @"Provider=Microsoft.Jet.OLEDB.4.0;Password="""";Data Source=" + DBName +";";
        tvSampleMenu.MenuItems.Add("Add Folder", new EventHandler(tvSampleRightClickInsFolder));
        tvSampleMenu.MenuItems.Add("Add Item", new EventHandler(tvSampleRightClickInsItem));
        tvSampleMenu.MenuItems.Add("Edit", new EventHandler(tvSampleRightClickEdit));
        tvSampleMenu.MenuItems.Add("Delete",new EventHandler(tvSampleRightClickDelete));
        LoadTree(tvNotes, GetHierarchy(DBConStr, 1));
           }
       catch (Exception err) 
         {  
           MessageBox.Show(err.Message);
         }
	    }
        //*----------------------------------------------------------*//
        private void LoadTree(TreeView tv, DataSet ds)
        {
            try
            {
                LoadFromDataSet(tv, ds, "Description");
                if (tv.Nodes.Count > 0)
                {
                    tv.Nodes[0].Expand();
                }
            }
            catch (Exception) 
            { 
                throw; 
            }
        }
        //*----------------------------------------------------------*//
        public static DataSet GetHierarchy(string connectionString, int modelID)
        {
            string sql = "";
            DataSet ds = null;
            try
            {
                sql = "select * from hierarchy ";
                sql += "  where modelid=" + modelID.ToString();
                sql += "  order by parentnodeid,sortorder asc";
                ds = GetDataSet(connectionString, sql);
                SetHierarchyRelationships(ds);
            }
            catch (Exception) { throw; }
            return ds;
        }
        //*----------------------------------------------------------*//
        public static void SetHierarchyRelationships(DataSet ds)
        {
            DataColumn fk;
            DataColumn[] pk = new DataColumn[1];
            ForeignKeyConstraint fkcdelete;
            DataRelation relation;
            string datarelationname = "ParentChild";
            try
            {
                ds.Tables[0].TableName = "Hierarchy";
                pk[0] = ds.Tables[0].Columns["NodeID"];
                fk = ds.Tables[0].Columns["ParentNodeID"];
                ds.Tables[0].PrimaryKey = pk;
                fkcdelete = new ForeignKeyConstraint(pk[0], fk);
                fkcdelete.DeleteRule = Rule.Cascade;
                relation = new DataRelation(datarelationname, pk[0], fk, false);
                ds.Tables[0].Constraints.Add(fkcdelete);
                ds.Tables[0].AcceptChanges();
                ds.Relations.Add(relation);
            }
            catch (Exception) { throw; }
            return;
        }
        //*----------------------------------------------------------*//
        public static bool CommitHierarchy(string connectionString, DataSet ds)
        {
            string sql = "";
            bool ret = false;
            int ModelID = 0;
            DataTable dt;
            try
            {
                if (ds.Tables.Count < 1) { return ret; }
                dt = ds.Tables[0];
                ModelID = int.Parse(dt.Rows[0]["ModelID"].ToString());
                sql = "select  * from Hierarchy where ModelID = " + ModelID.ToString();
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    if (dt.Rows[i].RowState.ToString() == "Deleted") { continue; }
                    if (int.Parse(dt.Rows[i]["ModelID"].ToString()) != ModelID)
                    {
                        dt.Rows[i]["ModelID"] = ModelID;
                    }
                }
                CommitToDataBase(connectionString, ds, sql);
                ret = true;
            }
            catch (Exception e)
            {
                //Debug.WriteLine(e.Message);
                throw;
            }
            return ret;
        }
        //*----------------------------------------------------------*//
        public static void CommitToDataBase(string connectionString, DataSet ds, string sql)
        {
            try
            {
                if (!ds.HasChanges()) { return; }
                using (OleDbConnection conn = new OleDbConnection())
                {
                    conn.ConnectionString = connectionString;
                    conn.Open();
                    using (OleDbDataAdapter da = new OleDbDataAdapter(sql, conn))
                    {
                        OleDbCommandBuilder b = new OleDbCommandBuilder(da);
                        da.Update(ds.Tables[0]);
                        ds.AcceptChanges();
                    }
                }
            }
            catch (Exception) { throw; }
        }
        //*----------------------------------------------------------*//
        public static DataSet GetDataSet(string connectionString, string sql)
        {
            DataSet ds = new DataSet();
            try
            {
                using (OleDbConnection conn = new OleDbConnection())
                {
                    conn.ConnectionString = connectionString;
                    conn.Open();
                    using (OleDbDataAdapter da = new OleDbDataAdapter(sql, conn))
                    {
                        da.Fill(ds);
                    }
                }
            }
            catch (Exception) { throw; }
            return ds;
        }        
        //*----------------------------------------------------------*//
        private void tvNotes_AfterLabelEdit(object sender, NodeLabelEditEventArgs e)
        {
            try
            {
                if (e.Label.Trim().Length < 1) { e.CancelEdit = true; }
                EditNode(tvNotes.SelectedNode, e.Label);
                tvNotes.SelectedNode.EndEdit(false);
                tvNotes.LabelEdit = false;
            }
            catch (Exception err) 
            { 
                MessageBox.Show(err.Message);
            }
        }
        //*----------------------------------------------------------*//
        private void tbAccChan_Click(object sender, EventArgs e)
        {
            DataRow row = null;
            try
            {
                if (tvNotes.Nodes.Count == 0) { return; }
                row = (DataRow)tvNotes.Nodes[0].Tag;
                CommitHierarchy(DBConStr, row.Table.DataSet);
            }
            catch (Exception err)
            { 
                MessageBox.Show(err.Message);
            }
        }
        //*----------------------------------------------------------*//
        private void InsertNewFolder(TreeNode node)
        {
         DataRow row = null;
         DataRow ParentRow = null;
         DataTable dt = null;
         int newindex = 0;
         try
         {
             ParentRow = (DataRow)node.Tag; 
             if (ParentRow == null) { return; }
             newindex = int.Parse(ParentRow["SortOrder"].ToString()) + 1;
             dt = ParentRow.Table;
             row = dt.NewRow();
             row["ModelID"] = int.Parse(ParentRow["ModelID"].ToString());
			 row["NodeID"] = Guid.NewGuid().ToString();
			 row["ParentNodeID"] = ParentRow[dt.PrimaryKey[0].ColumnName].ToString();
             row["Description"] = "New Node";
			 row["ImageIndex"] = 1;
			 row["SelectedImageIndex"] = 2;
             row["SortOrder"] = newindex;
             row["Data"] = textBox1.Text;
             dt.Rows.Add(row);
             TreeNode newNode = GetTreeNodeFromDataRow(row, "Description");
             node.Nodes.Add(newNode);
             tvNotes.SelectedNode = newNode; 
         }
         catch (Exception) 
		 {
			 throw;
		 }

      }
        //*----------------------------------------------------------*//
        private void InsertNewItem(TreeNode node)
        {
            DataRow row = null;
            DataRow ParentRow = null;
            DataTable dt = null;
            int newindex = 0;
            try
            {
                ParentRow = (DataRow)node.Tag;
                if (ParentRow == null) { return; }
                newindex = int.Parse(ParentRow["SortOrder"].ToString()) + 1;
                dt = ParentRow.Table;
                row = dt.NewRow();
                row["ModelID"] = int.Parse(ParentRow["ModelID"].ToString());
                row["NodeID"] = Guid.NewGuid().ToString();
                row["ParentNodeID"] = ParentRow[dt.PrimaryKey[0].ColumnName].ToString();
                row["Description"] = "New Node";
                row["ImageIndex"] = 3;
                row["SelectedImageIndex"] = 3;
                row["SortOrder"] = newindex;
                row["Data"] = textBox1.Text;
                dt.Rows.Add(row);
                TreeNode newNode = GetTreeNodeFromDataRow(row, "Description");
                node.Nodes.Add(newNode);
                tvNotes.SelectedNode = newNode;
            }
            catch (Exception)
            {
                throw;
            }

        }
       //*----------------------------------------------------------*//
        private void EditNode(TreeNode node, string newText)
        {
            DataRow row = null;
            try
            {
                if (node == null) { return; }
                if (node == tvNotes.Nodes[0]) { return; }
                row = (DataRow)node.Tag;
                if (row == null)
                {
                    return;
                }
                row["Description"] = newText;
            }
            catch (Exception) { throw; }
        }
        //*----------------------------------------------------------*//
        private void tvSampleRightClickDelete(object sender, System.EventArgs e)
         {
         try
          {
		  DeleteNode(tvNotes);
          }
         catch 
             (Exception err) 
         { 
             MessageBox.Show(err.Message);
         }
         }
        //*----------------------------------------------------------*//
        private void tvSampleRightClickEdit(object sender, System.EventArgs e)
        {
            try
            {
                TreeNode node = tvNotes.SelectedNode;
                if (node == null) { return; }
                if (node == tvNotes.Nodes[0]) { return; }
                node.TreeView.LabelEdit = true;
                node.BeginEdit();
            }
            catch (Exception err) 
            { 
                MessageBox.Show(err.Message);
            }
        }
        //*----------------------------------------------------------*//
        private void tvSampleRightClickInsFolder(object sender, System.EventArgs e)
        {
            try
            {
                TreeNode node = tvNotes.SelectedNode;
                if ((node == null) || (node.ImageIndex == 3)) { return; }
                InsertNewFolder(node);
            }
            catch (Exception err)
            {
                MessageBox.Show(err.Message);
            }
        }
        //*----------------------------------------------------------*//
        private void tvSampleRightClickInsItem(object sender, System.EventArgs e)
        {
            try
            {
                TreeNode node = tvNotes.SelectedNode;
                if (node == null) { return; }
                if ((node.ImageIndex == 0) || (node.ImageIndex == 3)) { return; }
                InsertNewItem(node);
            }
            catch (Exception err)
            {
                MessageBox.Show(err.Message);
            }
        }
        //*----------------------------------------------------------*//
        private void tvNotes_MouseDown(object sender, MouseEventArgs e)
        {
            SetSelectedNodeByPosition(tvNotes, e.X, e.Y);
            if (tvNotes.SelectedNode == null) { return; }
            if (e.Button == MouseButtons.Right) { return; }
        }
        //*----------------------------------------------------------*//
        private void tvNotes_MouseUp(object sender, MouseEventArgs e)
        {
            switch (e.Button)
            {
                case MouseButtons.Right:
                    tvSampleMenu.Show(tvNotes, new Point(e.X, e.Y));
                    return;
                default:
                    break;
            }
        }
        //*----------------------------------------------------------*//
        public static void SetSelectedNodeByPosition(TreeView tv, int mouseX, int mouseY)
        {
            TreeNode node = null;
            try
            {
                Point pt = new Point(mouseX, mouseY);
                tv.PointToClient(pt);
                node = tv.GetNodeAt(pt);
                tv.SelectedNode = node;
                if (node == null) return;
                if (!node.Bounds.Contains(pt)) { return; }
            }
            catch { }
            return;
        }
        //*----------------------------------------------------------*//
        public static void LoadFromDataSet(TreeView tv, DataSet ds, string textColumnName)
        {
            TreeNode node;
            DataRow row;
            try
            {
                tv.Nodes.Clear();
                if (ds.Tables.Count < 1) { return; }
                if (ds.Tables[0].Rows.Count < 1) { return; }
                string fkcolumnname = FindForeignKeyColumnName(ds.Tables[0]);
                row = ds.Tables[0].Rows[0];
                tv.BeginUpdate();
                node = GetTreeNodeFromDataRow(row, textColumnName);
                tv.Nodes.Add(node);
                AddNodeFromDataRow(node, row, textColumnName, FindForeignKeyRelationName(row.Table));
            }
            catch (Exception) { throw; }
            finally
            {
                tv.EndUpdate();
                ds.AcceptChanges();
            }
        }
        //*----------------------------------------------------------*//
        public static void AddNodeFromDataRow(TreeNode parentNode, DataRow row, string textColumnName, string dataRelationName)
        {
            try
            {
                foreach (DataRow childrow in row.GetChildRows(dataRelationName))
                {
                    parentNode.Nodes.Add(GetTreeNodeFromDataRow(childrow, textColumnName));
                    AddNodeFromDataRow(parentNode.LastNode, childrow, textColumnName, dataRelationName);
                }
            }
            catch (Exception) { throw; }
        }
        //*----------------------------------------------------------*//
        public static TreeNode GetTreeNodeFromDataRow(DataRow row, string textColumnName)
        {
            TreeNode child = null;
            string imageidx = "";
            string selimageidx = "";
            try
            {
                if (row.Table.Columns.Contains(ImageIndexColumnName))
                {
                    imageidx = row[ImageIndexColumnName].ToString();
                }
                if (row.Table.Columns.Contains(SelectedImageIndexColumnName))
                {
                    selimageidx = row[SelectedImageIndexColumnName].ToString();
                }
                child = new TreeNode();
                child.Text = row[textColumnName].ToString().Trim();
                if (imageidx.Length > 0)
                {
                    child.ImageIndex = Convert.ToInt32(imageidx);
                }
                if (selimageidx.Length > 0)
                {
                    child.SelectedImageIndex = Convert.ToInt32(selimageidx);
                }
                child.Tag = row;
            }
            catch (Exception) { throw; }
            return child;
        }
        //*----------------------------------------------------------*//
        public static void DeleteNode(TreeView tv)
        {
            DataRow row;
            try
            {
                if (tv.SelectedNode == null) { return; }
                if (tv.SelectedNode == tv.Nodes[0]) { return; }
                row = (DataRow)tv.SelectedNode.Tag;
                row.Delete();
                tv.SelectedNode.Remove();
            }
            catch (Exception) { throw; }
            return;
        }
        //*----------------------------------------------------------*//
        public static string FindForeignKeyColumnName(DataTable dt)
        {
            string Ret = "";
            try
            {
                DataSet ds = dt.DataSet;
                DataRelation rel = ds.Relations[0];
                Ret = rel.ChildColumns[0].ColumnName;
            }
            catch (Exception) { throw; }
            return Ret;
        }
        //*----------------------------------------------------------*//
        public static string FindForeignKeyRelationName(DataTable dt)
        {
            string Ret = "";
            try
            {
                DataSet ds = dt.DataSet;
                DataRelation rel = ds.Relations[0];
                Ret = rel.RelationName;
            }
            catch (Exception) { throw; }
            return Ret;
        }
        //*----------------------------------------------------------*// 
        protected override CreateParams CreateParams
        {
            get
            {
                CreateParams cp = base.CreateParams;
                cp.ExStyle |= 0x02000000;
                return cp;
            }
        }

        private void tvNotes_AfterSelect(object sender, TreeViewEventArgs e)
        {
            DataRow row = e.Node.Tag as DataRow;
            this.textBox1.Text = row["Data"].ToString();
        }
        //*----------------------------------------------------------*// 
	}
}

Open in new window

0
 
LVL 96

Expert Comment

by:Bob Learned
Comment Utility
Did you figure out your problem?
0

Featured Post

How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

Join & Write a Comment

Suggested Solutions

In my previous two articles we discussed Binary Serialization (http://www.experts-exchange.com/A_4362.html) and XML Serialization (http://www.experts-exchange.com/A_4425.html). In this article we will try to know more about SOAP (Simple Object Acces…
Entity Framework is a powerful tool to help you interact with the DataBase but still doesn't help much when we have a Stored Procedure that returns more than one resultset. The solution takes some of out-of-the-box thinking; read on!
When you create an app prototype with Adobe XD, you can insert system screens -- sharing or Control Center, for example -- with just a few clicks. This video shows you how. You can take the full course on Experts Exchange at http://bit.ly/XDcourse.
This video demonstrates how to create an example email signature rule for a department in a company using CodeTwo Exchange Rules. The signature will be inserted beneath users' latest emails in conversations and will be displayed in users' Sent Items…

728 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

14 Experts available now in Live!

Get 1:1 Help Now