
1、通过listview属性可以获得LV2当前被选择节点的属性(text\tag\key,一般使用key,可以考虑3个值都传回来)
2、通过listview属性可以获得LV1的被选择节点的属性,同理
3、通过存储过程或者代码去做递归,将LV2的节点以及节点的所有子节点内容写入数据库
4、重新获取LV1当前节点在数据库里的属性,重新加载该节点下的内容,不需要刷新整个LV1
正好这个问题我前段时间刚研究过。就向楼上说的重新绑定就好。写一个方法,绑定数据到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的。要不我的方法就帮不到你了。。别人那转发过来的。。。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)