using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.IO;
using System.Xml;
using System.Diagnostics;
using System.Threading;
using TreeSample;
namespace TreeSample
{
public class Form1 : System.Windows.Forms.Form
{
private string DBConStr = "";
private string AppPath = "";
private ContextMenu tvSample1Menu = new ContextMenu();
private ContextMenu tvSample2Menu = new ContextMenu();
private System.ComponentModel.IContainer components;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.TreeView tvSample;
private System.Windows.Forms.Button button1;
private System.Windows.Forms.Button button2;
private System.Windows.Forms.TreeView tvSample2;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.Button button3;
private System.Windows.Forms.Button button4;
private System.Windows.Forms.Button button5;
private System.Windows.Forms.Button button6;
private System.Windows.Forms.ImageList imageList1;
private void Form1_Load(object sender, System.EventArgs e)
{
UI.Hourglass(true);
try
{
AppPath = UI.GetAppPath();
DBConStr = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + AppPath + "sample.mdb";
tvSample1Menu.MenuItems.Add("Insert",
new EventHandler(tvSample1RightClickInsert));
tvSample1Menu.MenuItems.Add("Edit",
new EventHandler(tvSample1RightClickEdit));
tvSample1Menu.MenuItems.Add("Nudge Up",
new EventHandler(tvSample1RightClickNudgeUp));
tvSample1Menu.MenuItems.Add("Nudge Down",
new EventHandler(tvSample1RightClickNudgeDown));
tvSample1Menu.MenuItems.Add("Delete",
new EventHandler(tvSample1RightClickDelete));
tvSample2Menu.MenuItems.Add("Insert",
new EventHandler(tvSample2RightClickInsert));
tvSample2Menu.MenuItems.Add("Edit",
new EventHandler(tvSample2RightClickEdit));
tvSample2Menu.MenuItems.Add("Nudge Up",
new EventHandler(tvSample2RightClickNudgeUp));
tvSample2Menu.MenuItems.Add("Nudge Down",
new EventHandler(tvSample2RightClickNudgeDown));
tvSample2Menu.MenuItems.Add("Delete",
new EventHandler(tvSample2RightClickDelete));
LoadAllTrees();
tvSample.AllowDrop = true;
tvSample2.AllowDrop = true;
}
catch (Exception err) { UI.Hourglass(false); UI.ShowError(err.Message); }
finally { UI.Hourglass(false); }
}
private void LoadAllTrees()
{
try
{
LoadTree(tvSample,Rules.GetHierarchy(DBConStr,1));
LoadTree(tvSample2,Rules.GetHierarchy(DBConStr,2));
}
catch (Exception) { throw; }
}
private void LoadTree(TreeView tv,DataSet ds)
{
UI.Hourglass(true);
try
{
TreeViewUtil.LoadFromDataSet(tv,ds,"Description");
if (tv.Nodes.Count > 0)
{
tv.Nodes[0].Expand();
}
}
catch (Exception) { throw; }
finally
{
UI.Hourglass(false);
}
}
private void tvSample1RightClickDelete(object sender, System.EventArgs e)
{
UI.Hourglass(true);
try
{
TreeViewUtil.DeleteNode(tvSample,true);
}
catch (Exception err) { UI.ShowError(err.Message); }
finally { UI.Hourglass(false); }
}
private void tvSample2RightClickDelete(object sender, System.EventArgs e)
{
UI.Hourglass(true);
try
{
TreeViewUtil.DeleteNode(tvSample2,true);
}
catch (Exception err) { UI.ShowError(err.Message); }
finally { UI.Hourglass(false); }
}
private void tvSample1RightClickEdit(object sender, System.EventArgs e)
{
UI.Hourglass(true);
try
{
TreeNode node = tvSample.SelectedNode;
if (node == null) { return; }
node.TreeView.LabelEdit = true;
node.BeginEdit();
}
catch (Exception err) { UI.ShowError(err.Message); }
finally { UI.Hourglass(false); }
}
private void tvSample2RightClickEdit(object sender, System.EventArgs e)
{
UI.Hourglass(true);
try
{
TreeNode node = tvSample2.SelectedNode;
if (node == null) { return; }
node.TreeView.LabelEdit = true;
node.BeginEdit();
}
catch (Exception err) { UI.ShowError(err.Message); }
finally { UI.Hourglass(false); }
}
private void tvSample1RightClickNudgeUp(object sender, System.EventArgs e)
{
UI.Hourglass(true);
try
{
TreeViewUtil.NudgeUp(tvSample.SelectedNode);
}
catch (Exception err) { UI.ShowError(err.Message); }
finally { UI.Hourglass(false); }
}
private void tvSample1RightClickNudgeDown(object sender, System.EventArgs e)
{
UI.Hourglass(true);
try
{
TreeViewUtil.NudgeDown(tvSample.SelectedNode);
}
catch (Exception err) { UI.ShowError(err.Message); }
finally { UI.Hourglass(false); }
}
private void tvSample2RightClickNudgeUp(object sender, System.EventArgs e)
{
UI.Hourglass(true);
try
{
TreeViewUtil.NudgeUp(tvSample2.SelectedNode);
}
catch (Exception err) { UI.ShowError(err.Message); }
finally { UI.Hourglass(false); }
}
private void tvSample2RightClickNudgeDown(object sender, System.EventArgs e)
{
UI.Hourglass(true);
try
{
TreeViewUtil.NudgeDown(tvSample2.SelectedNode);
}
catch (Exception err) { UI.ShowError(err.Message); }
finally { UI.Hourglass(false); }
}
private void tvSample1RightClickInsert(object sender, System.EventArgs e)
{
UI.Hourglass(true);
try
{
TreeNode node = tvSample.SelectedNode;
if (node == null) { return; }
InsertNewNode(node);
}
catch (Exception err) { UI.ShowError(err.Message); }
finally { UI.Hourglass(false); }
}
private void tvSample2RightClickInsert(object sender, System.EventArgs e)
{
UI.Hourglass(true);
try
{
TreeNode node = tvSample2.SelectedNode;
if (node == null) { return; }
InsertNewNode(node);
}
catch (Exception err) { UI.ShowError(err.Message); }
finally { UI.Hourglass(false); }
}
private void InsertNewNode(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["ObjectID"] = Guid.NewGuid().ToString();
row["ObjectTypeID"] = 1;
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["ForeColor"] = "#000000";
row["BackColor"] = "#FFFFFF";
row["ImageIndex"] = 0;
row["SelectedImageIndex"] = 1;
row["Checked"] = true;
row["ActiveID"] = 1;
row["NamedRange"] = "";
row["NodeValue"] = "";
row["LastUpdateTime"] = DateTime.Now;
row["SortOrder"] = newindex;
dt.Rows.Add(row);
node.Nodes.Add(TreeViewUtil.GetTreeNodeFromDataRow(row,"Description"));
}
catch (Exception) { throw; }
}
private void EditNode(TreeNode node,string newText)
{
DataRow row = null;
try
{
if (node == null) { return; }
row = (DataRow)node.Tag;
if (row == null) { return; }
row["Description"] = newText;
}
catch (Exception) { throw; }
}
private void button1_Click(object sender, System.EventArgs e)
{
LoadAllTrees();
}
private void button2_Click(object sender, System.EventArgs e)
{
string filename = "";
DataSet ds;
DataRow row;
DataSet compareds;
try
{
UI.Hourglass(true);
// Write out the contents of tvSample to disk
filename = Path.Combine(AppPath,"treeview1.xml");
if (File.Exists(filename)) { File.Delete(filename); }
if (tvSample.Nodes.Count == 0) { return; }
row = (DataRow)tvSample.Nodes[0].Tag;
ds = row.Table.DataSet;
compareds = ds.GetChanges();
if (compareds != null)
{
compareds.WriteXml(filename,XmlWriteMode.DiffGram);
}
// Write out the contents of tvSample2 to disk
filename = Path.Combine(AppPath,"treeview2.xml");
if (File.Exists(filename)) { File.Delete(filename); }
if (tvSample2.Nodes.Count == 0) { return; }
row = (DataRow)tvSample2.Nodes[0].Tag;
ds = row.Table.DataSet;
compareds = ds.GetChanges();
if (compareds != null)
{
compareds.WriteXml(filename,XmlWriteMode.DiffGram);
}
}
catch (Exception err) { UI.ShowError(err.Message); }
finally { UI.Hourglass(false); }
}
private void tvSample_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
TreeViewUtil.SetSelectedNodeByPosition(tvSample,e.X,e.Y);
if (tvSample.SelectedNode == null) { return; }
if (e.Button == MouseButtons.Right) { return; }
}
private void tvSample_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
{
switch (e.Button)
{
case MouseButtons.Right:
tvSample1Menu.Show(tvSample,new Point(e.X,e.Y));
return;
default:
break;
}
}
private void tvSample2_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
TreeViewUtil.SetSelectedNodeByPosition(tvSample2,e.X,e.Y);
if (tvSample2.SelectedNode == null) { return; }
if (e.Button == MouseButtons.Right) { return; }
}
private void tvSample2_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
{
switch (e.Button)
{
case MouseButtons.Right:
tvSample2Menu.Show(tvSample2,new Point(e.X,e.Y));
break;
default:
break;
}
}
private void tvSample_ItemDrag(object sender, System.Windows.Forms.ItemDragEventArgs e)
{
DoDragDrop(e.Item, DragDropEffects.Move);
}
private void tvSample_DragEnter(object sender, System.Windows.Forms.DragEventArgs e)
{
TreeViewUtil.DragEnter((TreeView)sender,e);
}
private void tvSample_DragOver(object sender, System.Windows.Forms.DragEventArgs e)
{
TreeViewUtil.DragOver((TreeView)sender,e);
}
private void tvSample_DragDrop(object sender, System.Windows.Forms.DragEventArgs e)
{
DataRow row;
bool dropOnNewControl = false;
try
{
UI.Hourglass(true);
TreeViewUtil.DragDrop((TreeView)sender,e,ref dropOnNewControl);
if (dropOnNewControl)
{
row = (DataRow)tvSample2.Nodes[0].Tag;
Rules.CommitHierarchy(DBConStr,row.Table.DataSet);
row = (DataRow)tvSample.Nodes[0].Tag;
Rules.CommitHierarchy(DBConStr,row.Table.DataSet);
}
UI.Hourglass(false);
}
catch (Exception err) { UI.ShowError(err.Message); }
finally { UI.Hourglass(false); }
}
private void tvSample2_ItemDrag(object sender, System.Windows.Forms.ItemDragEventArgs e)
{
DoDragDrop(e.Item, DragDropEffects.Move);
}
private void tvSample2_DragEnter(object sender, System.Windows.Forms.DragEventArgs e)
{
TreeViewUtil.DragEnter((TreeView)sender,e);
}
private void tvSample2_DragOver(object sender, System.Windows.Forms.DragEventArgs e)
{
TreeViewUtil.DragOver((TreeView)sender,e);
}
private void tvSample2_DragDrop(object sender, System.Windows.Forms.DragEventArgs e)
{
DataRow row;
bool dropOnNewControl = false;
try
{
UI.Hourglass(true);
TreeViewUtil.DragDrop((TreeView)sender,e,ref dropOnNewControl);
if (dropOnNewControl)
{
row = (DataRow)tvSample.Nodes[0].Tag;
Rules.CommitHierarchy(DBConStr,row.Table.DataSet);
row = (DataRow)tvSample2.Nodes[0].Tag;
Rules.CommitHierarchy(DBConStr,row.Table.DataSet);
}
UI.Hourglass(false);
}
catch (Exception err) { UI.ShowError(err.Message); }
finally { UI.Hourglass(false); }
}
private void tvSample_AfterLabelEdit(object sender, System.Windows.Forms.NodeLabelEditEventArgs e)
{
try
{
if (e.Label.Trim().Length < 1) { e.CancelEdit = true; }
EditNode(tvSample.SelectedNode,e.Label);
tvSample.SelectedNode.EndEdit(false);
tvSample.LabelEdit = false;
}
catch (Exception err) { UI.ShowError(err.Message); }
}
private void tvSample2_AfterLabelEdit(object sender, System.Windows.Forms.NodeLabelEditEventArgs e)
{
try
{
if (e.Label.Trim().Length < 1) { e.CancelEdit = true; }
EditNode(tvSample2.SelectedNode,e.Label);
tvSample2.SelectedNode.EndEdit(false);
tvSample2.LabelEdit = false;
}
catch (Exception err) { UI.ShowError(err.Message); }
}
private void button3_Click(object sender, System.EventArgs e)
{
DataRow row = null;
UI.Hourglass(true);
try
{
if (tvSample.Nodes.Count == 0) { return; }
row = (DataRow)tvSample.Nodes[0].Tag;
Rules.CommitHierarchy(DBConStr,row.Table.DataSet);
}
catch (Exception err) { UI.ShowError(err.Message); }
finally { UI.Hourglass(false); }
}
private void button4_Click(object sender, System.EventArgs e)
{
DataRow row = null;
UI.Hourglass(true);
try
{
if (tvSample.Nodes.Count < 1) { return; }
row = (DataRow)tvSample.Nodes[0].Tag;
row.Table.DataSet.RejectChanges();
LoadTree(tvSample,row.Table.DataSet);
}
catch (Exception err) { UI.ShowError(err.Message); }
finally { UI.Hourglass(false); }
}
private void button6_Click(object sender, System.EventArgs e)
{
DataRow row = null;
UI.Hourglass(true);
try
{
if (tvSample2.Nodes.Count == 0) { return; }
row = (DataRow)tvSample2.Nodes[0].Tag;
Rules.CommitHierarchy(DBConStr,row.Table.DataSet);
}
catch (Exception err) { UI.ShowError(err.Message); }
finally { UI.Hourglass(false); }
}
private void button5_Click(object sender, System.EventArgs e)
{
DataRow row = null;
UI.Hourglass(true);
try
{
if (tvSample2.Nodes.Count < 1) { return; }
row = (DataRow)tvSample2.Nodes[0].Tag;
row.Table.DataSet.RejectChanges();
LoadTree(tvSample2,row.Table.DataSet);
}
catch (Exception err) { UI.ShowError(err.Message); }
finally { UI.Hourglass(false); }
}
private void Form1_Closed(object sender, System.EventArgs e)
{
}
private void cmdExit_Click(object sender, System.EventArgs e)
{
this.Close();
Application.Exit();
}
}
}
|
using System;
using System.Drawing;
using System.Xml;
using System.Diagnostics;
using System.Windows.Forms;
using System.Data;
namespace TreeSample
{
public class TreeViewUtil
{
private const string NodeObjectName = "System.Windows.Forms.TreeNode";
private const string CheckedColumnName = "Checked";
private const string ForeColorColumnName = "ForeColor";
private const string BackColorColumnName = "BackColor";
private const string ImageIndexColumnName = "ImageIndex";
private const string SelectedImageIndexColumnName = "SelectedImageIndex";
private const string SortOrderColumnName = "SortOrder";
public static void CheckAllChildNodes(TreeNode treeNode, bool nodeChecked)
{
foreach(TreeNode node in treeNode.Nodes)
{
node.Checked = nodeChecked;
if(node.Nodes.Count > 0)
{
CheckAllChildNodes(node, nodeChecked);
}
if (!node.Checked)
{
node.Collapse();
}
else
{
node.ExpandAll();
}
}
}
public static void CollapseTreeBranch(TreeNode parentNode)
{
try
{
if (parentNode.Nodes.Count < 1) { return; }
for(int i=0;i<parentNode.Nodes.Count;i++)
{
parentNode.Nodes[i].Collapse();
}
}
catch (Exception) { throw; }
}
public static void ShowContextMenu(TreeView tv,ContextMenu menu)
{
try
{
Point pt = new Point(tv.SelectedNode.Bounds.Left,
tv.SelectedNode.Bounds.Bottom);
menu.Show(tv,pt);
}
catch (Exception) { throw; }
}
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));
if (parentNode.TreeView.CheckBoxes)
{
if (row.Table.Columns.Contains(CheckedColumnName))
{
parentNode.LastNode.Checked = (bool)row[CheckedColumnName];
}
}
AddNodeFromDataRow(parentNode.LastNode,childrow,textColumnName,dataRelationName);
}
}
catch (Exception) { throw; }
}
public static TreeNode GetTreeNodeFromDataRow(DataRow row,string textColumnName)
{
TreeNode child = null;
string fcolor="";
string bcolor="";
string imageidx="";
string selimageidx="";
try
{
if (row.Table.Columns.Contains(ForeColorColumnName))
{
fcolor = row[ForeColorColumnName].ToString();
}
if (row.Table.Columns.Contains(BackColorColumnName))
{
bcolor = row[BackColorColumnName].ToString();
}
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);
}
if (fcolor.Length > 0)
{
child.ForeColor = ColorTranslator.FromHtml(fcolor);
}
if (bcolor.Length > 0)
{
child.BackColor = ColorTranslator.FromHtml(bcolor);
}
child.Tag = row;
}
catch (Exception) { throw; }
return child;
}
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 DeleteNode(TreeView tv,bool permitRootNodeDeletion)
{
DataRow row;
try
{
if (tv.SelectedNode == null) { return; }
if (tv.SelectedNode == tv.Nodes[0])
{
if (!permitRootNodeDeletion)
{
return;
}
else
{
row = (DataRow)tv.SelectedNode.Tag;
row.Delete();
tv.Nodes.Clear();
return;
}
}
row = (DataRow)tv.SelectedNode.Tag;
row.Delete();
tv.SelectedNode.Remove();
}
catch (Exception) { throw; }
return;
}
public static void DragEnter(TreeView tv,System.Windows.Forms.DragEventArgs e)
{
try
{
if (e.Data.GetDataPresent(NodeObjectName, true))
{
e.Effect = DragDropEffects.Move;
return;
}
e.Effect = DragDropEffects.None;
}
catch (Exception) { throw; }
}
public static void DragOver(TreeView tv,System.Windows.Forms.DragEventArgs e)
{
try
{
if (!e.Data.GetDataPresent(NodeObjectName, true)) { return; }
Point pt = tv.PointToClient(new Point(e.X,e.Y));
TreeNode tgtnode = tv.GetNodeAt(pt);
if (tv.SelectedNode != tgtnode)
{
tv.SelectedNode = tgtnode;
TreeNode drop = (TreeNode)e.Data.GetData(NodeObjectName);
while (tgtnode != null)
{
if (tgtnode == drop)
{
e.Effect = DragDropEffects.None;
return;
}
tgtnode = tgtnode.Parent;
}
}
e.Effect = DragDropEffects.Move;
}
catch (Exception) { throw; }
}
public static void DragDrop(TreeView tv,System.Windows.Forms.DragEventArgs e,
ref bool dropOnNewControl)
{
DataRow row;
DataRow NewParentRow;
DataTable dt;
try
{
dropOnNewControl = false;
if (!e.Data.GetDataPresent(NodeObjectName,true)) { return; }
TreeNode drop = (TreeNode)e.Data.GetData(NodeObjectName);
TreeNode tgtnode = tv.SelectedNode;
if (drop == drop.TreeView.Nodes[0])
{
return;
}
if (drop == tgtnode)
{
return;
}
NewParentRow = (DataRow)tgtnode.Tag;
dt = NewParentRow.Table;
row = (DataRow)drop.Tag;
// Is this the same control?
if (tgtnode.TreeView == drop.TreeView)
{
// If same control, just change the parent key;
row[FindForeignKeyColumnName(dt)] = NewParentRow[dt.PrimaryKey[0].ColumnName];
}
else
{
dropOnNewControl = true;
// If different control, we must copy the branch of DataRows
// to the target node's DataRow DataTable.
SetNewDataRowReferencesForNode(drop,row,NewParentRow,true);
row.Delete();
}
// This removes the TreeNodes from the TreeView but
// doesn't destroy our drop DataRows.
drop.Remove();
if (tgtnode == null)
{
tv.Nodes.Add(drop);
}
else
{
tgtnode.Nodes.Add(drop);
}
ReOrderSiblings(drop);
drop.EnsureVisible();
tv.SelectedNode = drop;
}
catch (Exception)
{
throw;
}
}
private static void SetNewDataRowReferencesForNode(TreeNode node,DataRow oldRow,
DataRow newParentRow,bool resetThisParentID)
{
DataRow NewRow = null;
DataTable dt;
try
{
dt = newParentRow.Table;
NewRow = CopyRowToNewTable(oldRow,dt);
if (resetThisParentID)
{
NewRow[FindForeignKeyColumnName(dt)] = newParentRow[dt.PrimaryKey[0].ColumnName];
}
dt.Rows.Add(NewRow);
node.Tag = NewRow;
foreach(TreeNode childnode in node.Nodes)
{
SetNewDataRowReferencesForNode(childnode,(DataRow)childnode.Tag,newParentRow,false);
}
}
catch (Exception) { throw; }
}
private static DataRow CopyRowToNewTable(DataRow oldRow,DataTable newParentTable)
{
DataRow NewRow = null;
try
{
NewRow = newParentTable.NewRow();
NewRow.ItemArray = oldRow.ItemArray;
}
catch (Exception) { throw; }
return NewRow;
}
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;
}
public static void NudgeUp(TreeNode node)
{
int NewIndex = 0;
TreeNode NodeClone = null;
try
{
if (node == null) { return; }
if (node.Index == 0) { return; }
NewIndex = node.Index - 1;
NodeClone = (TreeNode)node.Clone();
node.Parent.Nodes.Insert(NewIndex,NodeClone);
node.Parent.Nodes.Remove(node);
ReOrderSiblings(NodeClone);
NodeClone.TreeView.SelectedNode = NodeClone;
}
catch (Exception) { throw; }
return;
}
public static void NudgeDown(TreeNode node)
{
int NewIndex = 0;
TreeNode NodeClone = null;
try
{
if (node == null) { return; }
NewIndex = node.Index + 2;
if (NewIndex > node.Parent.Nodes.Count) { return; }
NodeClone = (TreeNode)node.Clone();
node.Parent.Nodes.Insert(NewIndex,NodeClone);
node.Parent.Nodes.Remove(node);
ReOrderSiblings(NodeClone);
NodeClone.TreeView.SelectedNode = NodeClone;
}
catch (Exception) { throw; }
return;
}
private static void SetRowSortOrder(TreeNode node,int newIndex)
{
try
{
DataRow row = (DataRow)node.Tag;
row[SortOrderColumnName] = newIndex;
}
catch (Exception) { throw; }
return;
}
private static void ReOrderSiblings(TreeNode node)
{
TreeNode child = null;
try
{
for(int i=0;i<node.Parent.Nodes.Count;i++)
{
child = node.Parent.Nodes[i];
SetRowSortOrder(child,i);
}
}
catch (Exception) { throw; }
return;
}
}
}
|