非常急的问题关于TreeView上下移动结点的问题 本人在用C#中c/s结构中用到结点上下移动的问题.移动的结点我还有子结点,请高人指教,本人不胜感激. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 给你我的源码!把多于的东西删掉就可以了。#region 移动节点 private void tsbDown_Click(object sender, EventArgs e) { MoveNodesUp(false); } private void tsbUp_Click(object sender, EventArgs e) { MoveNodesUp(true); } private void MoveNodesUp(bool bUp) { if (treeView.SelectedNode != null && treeView.SelectedNode.Parent != null) { TreeNode moveNode = treeView.SelectedNode; int iTotolNodes = moveNode.Parent.Nodes.Count;//看本级节点一共有多少个 int iNodeIndex = treeView.SelectedNode.Index;//本节点的Index if (iNodeIndex == 0 && bUp) { MessageBox.Show("本节点已经是本级第一个节点了,不可以再上移了"); } else if (iNodeIndex == iTotolNodes - 1 && !bUp) { MessageBox.Show("本节点已经是本级最后一个节点了,不可以再下移了"); } else {//移动的节点 iNodeIndex = (bUp ? iNodeIndex - 1 : iNodeIndex + 1);//如果上移就-1 TreeNode parentNode = moveNode.Parent; //父节点 TreeNode neighborNode = parentNode.Nodes[iNodeIndex]; treeView.SelectedNode.Remove(); parentNode.Nodes.Insert(iNodeIndex, moveNode); //移动之后要修改被其上一个或下一个节点的Dply_NO treeView.SelectedNode = moveNode; //调整表中相关字段 DataRow row1 = dataSet.Tables["SYS_T"].Rows.Find(moveNode.Tag.ToString());//根据GUID找到相关行 int iDply_No1 = bUp ? -1 : 1; row1["Dply_No"] = Convert.ToInt32(row1["Dply_No"]) + iDply_No1; DataRow row2 = dataSet.Tables["SYS_T"].Rows.Find(neighborNode.Tag.ToString());//根据GUID找到相关行 int iDply_No2 = bUp ? 1 : -1; row2["Dply_No"] = Convert.ToInt32(row2["Dply_No"]) + iDply_No2; } } else { MessageBox.Show("没有选中节点或不可以移动此节点"); } } #endregion 我这个树的节点的Tag跟存储这棵树的表的主键绑定的。对你来讲就两句话有用:treeView.SelectedNode.Remove();parentNode.Nodes.Insert(iNodeIndex, moveNode);这是标准做法了。 C# 中多线程的处理 汉字区位码/内码 Unicode 和Byte数组的转换不可逆? c#关于openfiledialog的问题 请问pictureBox框如何让背景透明啊?? 我现在很矛盾啊!水来帮帮我啊!大哥大姐! c#的progressbar C#代码总是崩溃 求助大侠,一段C++ 代码翻译 C# WinForm 运行久了就内存不足 请教Visual C#2005 与 Oracle数据库问题 如果dataset中没有数据,该如何显示?
#region 移动节点
private void tsbDown_Click(object sender, EventArgs e)
{
MoveNodesUp(false);
} private void tsbUp_Click(object sender, EventArgs e)
{
MoveNodesUp(true);
} private void MoveNodesUp(bool bUp)
{
if (treeView.SelectedNode != null && treeView.SelectedNode.Parent != null)
{
TreeNode moveNode = treeView.SelectedNode;
int iTotolNodes = moveNode.Parent.Nodes.Count;//看本级节点一共有多少个 int iNodeIndex = treeView.SelectedNode.Index;//本节点的Index
if (iNodeIndex == 0 && bUp)
{
MessageBox.Show("本节点已经是本级第一个节点了,不可以再上移了");
}
else
if (iNodeIndex == iTotolNodes - 1 && !bUp)
{
MessageBox.Show("本节点已经是本级最后一个节点了,不可以再下移了");
}
else
{//移动的节点 iNodeIndex = (bUp ? iNodeIndex - 1 : iNodeIndex + 1);//如果上移就-1 TreeNode parentNode = moveNode.Parent; //父节点 TreeNode neighborNode = parentNode.Nodes[iNodeIndex]; treeView.SelectedNode.Remove();
parentNode.Nodes.Insert(iNodeIndex, moveNode); //移动之后要修改被其上一个或下一个节点的Dply_NO
treeView.SelectedNode = moveNode; //调整表中相关字段
DataRow row1 = dataSet.Tables["SYS_T"].Rows.Find(moveNode.Tag.ToString());//根据GUID找到相关行
int iDply_No1 = bUp ? -1 : 1;
row1["Dply_No"] = Convert.ToInt32(row1["Dply_No"]) + iDply_No1; DataRow row2 = dataSet.Tables["SYS_T"].Rows.Find(neighborNode.Tag.ToString());//根据GUID找到相关行
int iDply_No2 = bUp ? 1 : -1;
row2["Dply_No"] = Convert.ToInt32(row2["Dply_No"]) + iDply_No2;
}
}
else
{
MessageBox.Show("没有选中节点或不可以移动此节点");
}
}
#endregion
treeView.SelectedNode.Remove();
parentNode.Nodes.Insert(iNodeIndex, moveNode);这是标准做法了。