Peter Kiers
asked on
Help needed with treeview methode AfterSelect
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
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
{
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;
}
//*----------------------------------------------------------*//
}
}
ASKER
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.TreeV iewEventAr gs e)
{
lblInfo.Text = DataClass.GetDisplayText(( DataRow)e. Node.Tag);
}
p.
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.TreeV
{
lblInfo.Text = DataClass.GetDisplayText((
}
p.
That would work, if you were storing an object in the TreeNode.Tag property.
ASKER
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.
{
DataRow row = null;
textBox1.Text = (DataRow)tvNotes.Nodes[0].
}
I get: Cannot implicitly convert type 'System.Data.DataRow' to 'string'
P.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Allthou i get no errors its not working...
Peter
Peter
Peter,
If what you have is not working, then I need more information. Can you show me how you are creating TreeNodes?
If what you have is not working, then I need more information. Can you show me how you are creating TreeNodes?
ASKER
This is the way nodes a be created:
private void tvSampleRightClickInsFolde r(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.Messag e);
}
}
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["SortO rder"].ToS tring()) + 1;
dt = ParentRow.Table;
row = dt.NewRow();
row["ModelID"] = int.Parse(ParentRow["Model ID"].ToStr ing());
row["NodeID"] = Guid.NewGuid().ToString();
row["ParentNodeID"] = ParentRow[dt.PrimaryKey[0] .ColumnNam e].ToStrin g();
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.
private void tvSampleRightClickInsFolde
{
try
{
TreeNode node = tvNotes.SelectedNode;
if ((node == null) || (node.ImageIndex == 3)) { return; }
InsertNewFolder(node);
}
catch (Exception err)
{
MessageBox.Show(err.Messag
}
}
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["SortO
dt = ParentRow.Table;
row = dt.NewRow();
row["ModelID"] = int.Parse(ParentRow["Model
row["NodeID"] = Guid.NewGuid().ToString();
row["ParentNodeID"] = ParentRow[dt.PrimaryKey[0]
row["Description"] = "New Node";
row["ImageIndex"] = 1;
row["SelectedImageIndex"] = 2;
row["SortOrder"] = newindex;
dt.Rows.Add(row);
TreeNode newNode = GetTreeNodeFromDataRow(row
node.Nodes.Add(newNode);
tvNotes.SelectedNode = newNode;
}
catch (Exception)
{
throw;
}
}
P.
ASKER
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.
the text will be shown in the texbox that is associated with the treeview
node. But the afterselect method does not work.
P.
Peter,
I see where you are creating a new TreeNode here:
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.
I see where you are creating a new TreeNode here:
TreeNode newNode = GetTreeNodeFromDataRow(row, "Description");
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.
ASKER
Sorry i forgot to mention a line that I have marked with an arrow.
P.
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.
ASKER
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.Messag e);
}
}
private void tbAccChan_Click(object sender, EventArgs e)
{
DataRow row = null;
try
{
if (tvNotes.Nodes.Count == 0) { return; }
row = (DataRow)tvNotes.Nodes[0].
CommitHierarchy(DBConStr, row.Table.DataSet);
}
catch (Exception err)
{
MessageBox.Show(err.Messag
}
}
ASKER
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.
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();
}
//*----------------------------------------------------------*//
}
}
Did you figure out your problem?
Open in new window