c# form窗体,动态实现Treeview节点的添加和删除。麻烦各位帮帮忙了,不好意思,没分了。
展开全部
正好这个问题我前段时间刚研究过。就向楼上说的重新绑定就好。写一个方法,绑定数据到TREEVIEW以实现树结构。右键添加或删除的方法用SQL语句直接添加或删除数据。执行完SQL语句再重新调用写好的绑定数据的方法。这样用有个问题。就是因为重新绑定数据的关系,选定的节点会没有。。刚才还想到。要是你的树不是用数据库添加的,是手动创建的,那我的方法就没有用了。。下面给你我弄这个时候的一段代码。有说明。你对着看一下下。
//窗口载入
private void RelayMesFrm_Load(object sender, EventArgs e)
{
TreeViewBind(); //绑定数据到Treeview的方法
t_tvw_relay.ExpandAll(); //展开所有节点
}
//这个方法是根据我用到的情况写的。算上根节点一共才能三级节点,一级节点只有五个。所以新建了一个类型去保存。没有用到数据库,二级节点是从数据库中调出来的,根节点是手动创建的。
private void TreeViewBind() //绑定数据到Treeview的方法
{
TreeNode pNode = new TreeNode(); //新建根节点
pNode.Text = "指令类型";
pNode.Name = "0";
t_tvw_relay.Nodes.Add(pNode);
foreach (var m in tn.dn) //绑定一级节点
{
TreeNode node = new TreeNode();
node.Text = m.Value.ToString();
node.Name = m.Key.ToString();
pNode.Nodes.Add(node);
foreach (var n in dalrelay.getInstance().GetList()) //绑定二级节点
{
if (n.code.ToString() == node.Name && n.parentid == 0) //条件,二级节点和一级节点的关系
{
TreeNode nodesql = new TreeNode();//新建二级节点
nodesql.Text = n.name.ToString();
nodesql.Name = n.id.ToString();
node.Nodes.Add(nodesql);
}
}
}
}
然后比如加一个删除的代码:
//TreeView右键删除事件
private void t_cms_delete_Click(object sender, EventArgs e)
{
List<relay> pd = new List<relay>(); //这是我新建的一个类。就是调用数据库中的数据用的。
pd = dal_model.Getlist().FindAll(m => m.parentid.ToString() == model.te.Name);//查出当前选中节点的ID和数据库中该ID对应的数据
if (pd.Count != 0)
{
MessageBox.Show("该节点下有数据,不可删除!", "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
dal_model.delete_relay(model.te.Name.ToString());//删除方法
TreeViewBind(); //注意这里,这就是解决你问题的地方了,重新调用方法就可以
t_tvw_relay.ExpandAll(); //展开所有节点
}
}
添加节点也一样,就是这个意思。希望你是用数据库绑定Treeview的。要不我的方法就帮不到你了。。别人那转发过来的。。。
//窗口载入
private void RelayMesFrm_Load(object sender, EventArgs e)
{
TreeViewBind(); //绑定数据到Treeview的方法
t_tvw_relay.ExpandAll(); //展开所有节点
}
//这个方法是根据我用到的情况写的。算上根节点一共才能三级节点,一级节点只有五个。所以新建了一个类型去保存。没有用到数据库,二级节点是从数据库中调出来的,根节点是手动创建的。
private void TreeViewBind() //绑定数据到Treeview的方法
{
TreeNode pNode = new TreeNode(); //新建根节点
pNode.Text = "指令类型";
pNode.Name = "0";
t_tvw_relay.Nodes.Add(pNode);
foreach (var m in tn.dn) //绑定一级节点
{
TreeNode node = new TreeNode();
node.Text = m.Value.ToString();
node.Name = m.Key.ToString();
pNode.Nodes.Add(node);
foreach (var n in dalrelay.getInstance().GetList()) //绑定二级节点
{
if (n.code.ToString() == node.Name && n.parentid == 0) //条件,二级节点和一级节点的关系
{
TreeNode nodesql = new TreeNode();//新建二级节点
nodesql.Text = n.name.ToString();
nodesql.Name = n.id.ToString();
node.Nodes.Add(nodesql);
}
}
}
}
然后比如加一个删除的代码:
//TreeView右键删除事件
private void t_cms_delete_Click(object sender, EventArgs e)
{
List<relay> pd = new List<relay>(); //这是我新建的一个类。就是调用数据库中的数据用的。
pd = dal_model.Getlist().FindAll(m => m.parentid.ToString() == model.te.Name);//查出当前选中节点的ID和数据库中该ID对应的数据
if (pd.Count != 0)
{
MessageBox.Show("该节点下有数据,不可删除!", "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
dal_model.delete_relay(model.te.Name.ToString());//删除方法
TreeViewBind(); //注意这里,这就是解决你问题的地方了,重新调用方法就可以
t_tvw_relay.ExpandAll(); //展开所有节点
}
}
添加节点也一样,就是这个意思。希望你是用数据库绑定Treeview的。要不我的方法就帮不到你了。。别人那转发过来的。。。
展开全部
#region InitTreeView(),初始化树形结构
/// <summary>
/// 初始化树形结构
/// </summary>
/// <param name="tv">树结构TreeView</param>
/// <param name="tableName">表名</param>
public void InitTreeView(TreeView tv,string tableName)
{
tv.Nodes.Clear();
string sql = "select * from " + tableName;
DataTable dt = od.DataTable(sql);
od.Close();
SetTreeViewNode(tv, dt, tableName, "-1", null);
tv.SelectedNode = tv.Nodes[0];
tv.SelectedNode.Expand();
}
//递归创建树
private void SetTreeViewNode(TreeView tv, DataTable dt, string tableName, string parentID, TreeNode parentNode)
{
ImageList cataImageList = new ImageList();
cataImageList.Images.Add(Image.FromFile(@"image\ico\类型.ico"));
cataImageList.Images.Add(Image.FromFile(@"image\ico\档案.ico"));
DataView dv = dt.DefaultView;
dv.Sort = "i_parentID";
DataRowView[] drvs = dv.FindRows(parentID);
if (drvs.Length > 0)
{
foreach (DataRowView drv in drvs)
{
string ID = null;
TreeNode newTreeNode = new TreeNode();
//如果创建的为实体树
if (tableName == "SYS_ENTITY")
{
ID = drv["ID"].ToString();
newTreeNode.Text =drv["c_entityID"].ToString() +
" " + drv["c_entity"].ToString();
}
//如果创建的是档案树
if (tableName == "SYS_TABLE")
{
tv.ImageList = cataImageList;
ID = drv["tbl_ID"].ToString();
newTreeNode.Text = drv["c_tblName"].ToString();
newTreeNode.Tag = drv["c_type"];
if (newTreeNode.Tag.ToString() == "CLSC")
{
newTreeNode.ImageIndex = 0;
newTreeNode.SelectedImageIndex = 0;
}
if (newTreeNode.Tag.ToString() == "USET")
{
newTreeNode.ImageIndex = 1;
newTreeNode.SelectedImageIndex = 1;
}
}
SetTreeViewNode(tv, dt, tableName, ID, newTreeNode);
if (parentNode == null)
{
tv.Nodes.Add(newTreeNode);
}
else
{
parentNode.Nodes.Add(newTreeNode);
}
}
}
}
#endregion
/// <summary>
/// 初始化树形结构
/// </summary>
/// <param name="tv">树结构TreeView</param>
/// <param name="tableName">表名</param>
public void InitTreeView(TreeView tv,string tableName)
{
tv.Nodes.Clear();
string sql = "select * from " + tableName;
DataTable dt = od.DataTable(sql);
od.Close();
SetTreeViewNode(tv, dt, tableName, "-1", null);
tv.SelectedNode = tv.Nodes[0];
tv.SelectedNode.Expand();
}
//递归创建树
private void SetTreeViewNode(TreeView tv, DataTable dt, string tableName, string parentID, TreeNode parentNode)
{
ImageList cataImageList = new ImageList();
cataImageList.Images.Add(Image.FromFile(@"image\ico\类型.ico"));
cataImageList.Images.Add(Image.FromFile(@"image\ico\档案.ico"));
DataView dv = dt.DefaultView;
dv.Sort = "i_parentID";
DataRowView[] drvs = dv.FindRows(parentID);
if (drvs.Length > 0)
{
foreach (DataRowView drv in drvs)
{
string ID = null;
TreeNode newTreeNode = new TreeNode();
//如果创建的为实体树
if (tableName == "SYS_ENTITY")
{
ID = drv["ID"].ToString();
newTreeNode.Text =drv["c_entityID"].ToString() +
" " + drv["c_entity"].ToString();
}
//如果创建的是档案树
if (tableName == "SYS_TABLE")
{
tv.ImageList = cataImageList;
ID = drv["tbl_ID"].ToString();
newTreeNode.Text = drv["c_tblName"].ToString();
newTreeNode.Tag = drv["c_type"];
if (newTreeNode.Tag.ToString() == "CLSC")
{
newTreeNode.ImageIndex = 0;
newTreeNode.SelectedImageIndex = 0;
}
if (newTreeNode.Tag.ToString() == "USET")
{
newTreeNode.ImageIndex = 1;
newTreeNode.SelectedImageIndex = 1;
}
}
SetTreeViewNode(tv, dt, tableName, ID, newTreeNode);
if (parentNode == null)
{
tv.Nodes.Add(newTreeNode);
}
else
{
parentNode.Nodes.Add(newTreeNode);
}
}
}
}
#endregion
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询