• C#之Winform中treeview控件绑定数据库


    private DataSet ds;
    private SqlDataAdapter sqlDataAdapter1;
    private int maxnodeid;
    
    private void Form1_Load(object sender, System.EventArgs e)
    {
    string strconn=ConfigurationSettings.AppSettings["ConnStr"];
    sqlConnection1 = new SqlConnection(strconn);
    this.sqlConnection1.Open();
    //填充DataSet
    this.CreateDataSet();
    //从数据库中读取数据,通过递归生成树。
    InitTree(this.treeView1.Nodes,"0");
    
    }
    
    
    private void CreateDataSet()
    {
    this.sqlDataAdapter1=new SqlDataAdapter("select * from s_menu ",this.sqlConnection1);
    this.ds=new DataSet();
    this.sqlDataAdapter1.Fill(ds,"tree");
    }
    private void InitTree(TreeNodeCollection Nds,string parentId)
    {
    DataView dv=new DataView();
    TreeNode tmpNd;
    string intId;
    dv.Table=ds.Tables["tree"];
    dv.RowFilter="ParentId='" + parentId + "'" ;
    foreach(DataRowView drv in dv)
    {
    tmpNd=new TreeNode();
    tmpNd.Tag=drv["NodeId"].ToString();
    tmpNd.Text=drv["NodeName"].ToString();
    Nds.Add(tmpNd);
    intId=drv["ParentId"].ToString();
    InitTree(tmpNd.Nodes,tmpNd.Tag.ToString());
    }
    }
    //新增节点操作
    private void insert(string type)
    {//判断是新增树节点,还是子节点.
    string strinsert="insert into s_menu values('{0}','{1}','{2}')";
    string strformat="";
    if(type=="sub")
    strformat=string.Format(strinsert,maxnodeid.ToString(),this.selectnode.Tag.ToString(),this.strcomm);
    else
    strformat=string.Format(strinsert,maxnodeid.ToString(),"0",this.strcomm);
    SqlCommand cmd=new SqlCommand(strformat,this.sqlConnection1);
    cmd.ExecuteNonQuery();
    }
    //为新增节点算出最大的节点值,并以此值作为新增的节点ID值
    private int GetMaxNodeid()
    {
    int pre=0,last=0;
    DataSet maxds=new DataSet();
    this.sqlDataAdapter1=new SqlDataAdapter("select nodeid from s_menu order by nodeid",this.sqlConnection1);
    this.sqlDataAdapter1.Fill(maxds);
    for(int i=0;i{
    if(i+1{
    pre=int.Parse(maxds.Tables[0].Rows[i][0].ToString());
    last=int.Parse(maxds.Tables[0].Rows[i+1][0].ToString());
    if(last-pre!=1)
    return pre+1;
    }
    }
    return last+1;
    }
    private void getallnode(TreeNode tn)
    {
    foreach(TreeNode node in tn.Nodes)
    {
    list.Add(node.Tag.ToString());
    if(node.Nodes.Count>0)
    {
    getallnode(node);
    }
    }
    }
    
    private void treeView1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
    {
    //判断是否点击了某个节点
    this.selectnode= this.treeView1.GetNodeAt (e.X ,e.Y );
    if(selectnode==null)
    this.isselected=false;
    else
    this.isselected=true;
    }
    private void menuAdd_Click(object sender, System.EventArgs e)
    {//判断是否点击了某个节点,若没有点击了,则是新增一个树节点
    if(isselected==false)
    {//算出新增树节点的ID值
    maxnodeid=GetMaxNodeid();
    TreeNode tmpNd=new TreeNode();
    //赋值
    tmpNd.Tag=this.maxnodeid.ToString();
    FormCommon frmCommon=new FormCommon();
    DialogResult result= frmCommon.ShowDialog();
    if(result==DialogResult.OK)
    {//取到新增树节点的文本值
    tmpNd.Text=frmCommon.strcomm;
    this.strcomm=frmCommon.strcomm;
    //新增树节点
    this.treeView1.Nodes.Add(tmpNd);
    //插入数据库(说明插入的是树节点)
    this.insert("root");
    //展开
    this.selectnode.Expand();
    }
    }
    else
    {//判断是否点击了某个节点,若点击了,则是新增一个子节点
    this.contextAddSub();
    }
    }
    private void contextAddSub()
    {//得到新增子节点的ID值
    maxnodeid=GetMaxNodeid();
    TreeNode tmpNd=new TreeNode();
    //赋值
    tmpNd.Tag=this.maxnodeid.ToString();
    FormCommon frmCommon=new FormCommon();
    DialogResult result= frmCommon.ShowDialog();
    if(result==DialogResult.OK)
    {//取到新增树节点的文本值
    tmpNd.Text=frmCommon.strcomm;
    this.strcomm=frmCommon.strcomm;
    //新增子节点
    this.selectnode.Nodes.Add(tmpNd);
    //插入数据库(说明插入的是子节点)
    this.insert("sub");
    //展开
    this.treeView1.SelectedNode.Expand();
    }
    }
    //删除节点操作
    private void menuDel_Click(object sender, System.EventArgs e)
    {//新建一个ArrayList,用于保存要删除的节点下边的所有子节点
    list=new ArrayList();
    if(this.isselected==true)
    {//得到删除的节点下边的所有子节点
    getallnode(this.selectnode);
    //把要删除的节点也加进去
    list.Add(this.selectnode.Tag.ToString());
    //循环从数据库中删除
    for(int i=0;i{
    string strdel="delete s_menu where nodeid='{0}'";
    string strformat="";
    strformat=string.Format(strdel,list[i]);
    SqlCommand cmd=new SqlCommand(strformat,this.sqlConnection1);
    cmd.ExecuteNonQuery();
    }
    //从树中删除
    this.selectnode.Remove();
    }
    }
    //修改节点的值
    private void menuEdit_Click(object sender, System.EventArgs e)
    {
    if(this.isselected==true)
    {
    FormCommon frmCommon=new FormCommon();
    DialogResult result= frmCommon.ShowDialog();
    if(result==DialogResult.OK)
    {
    string strdel="update s_menu set nodename= '{1}' where nodeid='{0}'";
    string strformat="";
    strformat=string.Format(strdel,this.selectnode.Tag.ToString(),frmCommon.strcomm);
    SqlCommand cmd=new SqlCommand(strformat,this.sqlConnection1);
    cmd.ExecuteNonQuery();
    this.selectnode.Text=frmCommon.strcomm;
    }
    }
    }
    //遍历所有节点.查找值
    private void getvaluenode(TreeNodeCollection tn,string value)
    {
    foreach(TreeNode node in tn)
    {
    if(node.Nodes.Count>0)
    {
    getvaluenode(node.Nodes,value);
    }
    if(node.Text==value)
    listnode.Add(node);
    }
    }
    private void menuSearch_Click(object sender, System.EventArgs e)
    {
    int j,k;
    this.listnode=new ArrayList();
    FormCommon frmCommon=new FormCommon();
    DialogResult result= frmCommon.ShowDialog();
    if(result==DialogResult.OK)
    {
    TreeNode n =new TreeNode();
    TreeNode temp=new TreeNode();
    //下面的函数是填充listnode;
    getvaluenode(this.treeView1.Nodes,frmCommon.strcomm);
    for(int i=0;i{
    j=0;k=0;
    n=(TreeNode)listnode[i];
    if (n != null)
    {
    temp=n;
    //得到上面结点的数量,并将数量保存到变量j;
    for(;n.Parent!=null;)
    {
    n=n.Parent;
    j++;
    }
    //恢复原值
    n=temp;
    //新建一个树结点数组做保存得到查询到的所有节点.
    TreeNode[] m=new TreeNode[j];
    for(;n.Parent!=null;)
    {
    n=n.Parent;
    m[k]=n;
    k++;
    }
    for(int p=0;pm[p].Expand();
    n=temp;
    n.ForeColor=Color.Red;
    }
    }
    }
    }
    private void treeView1_AfterLabelEdit(object sender, System.Windows.Forms.NodeLabelEditEventArgs e)
    {
    if(this.treeView1.SelectedNode.Text!=null)
    {
    string strdel="update s_menu set nodename= '{1}' where nodeid='{0}'";
    string strformat="";strformat=string.Format(strdel,this.treeView1.SelectedNode.Tag.ToString(),e.Label.ToString());SqlCommand cmd=new SqlCommand(strformat,this.sqlConnection1);
    cmd.ExecuteNonQuery();
    
    }
    }
    private void treeView1_AfterSelect(object sender, System.Windows.Forms.TreeViewEventArgs e)
    {
    this.listBox1.Items.Clear();
    this.listBox1.Items.Add(this.treeView1.SelectedNode.FullPath.ToString());
    }
    }
    } 
  • 相关阅读:
    软件工程阅读笔记02
    软件工程阅读笔记01
    四则运算二
    第十七周学习进度条
    个人总结以及建议
    写api接口神器--带你5分钟了解swagger
    nginx的配置和基本参数说明
    larval 使用redis做缓存
    Laravel——缓存使用
    开启redis-server提示 # Creating Server TCP listening socket *:6379: bind: Address already in use--解决方法
  • 原文地址:https://www.cnblogs.com/liuyudong0825/p/4895035.html
Copyright © 2020-2023  润新知