zoukankan      html  css  js  c++  java
  • C#应用程序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()); 


    }

  • 相关阅读:
    vue中的组件传值
    Object中defineProperty数据描述
    promiseall的使用场景
    babel安装及使用
    checkbox属性checked="checked"已有,但却不显示打勾的解决办法
    【转载】表单验证<AngularJs>
    CSS3 :nth-child()伪类选择器
    【转载】浏览器加载和渲染html的顺序
    css制作的61种图像
    网站链接样式设置
  • 原文地址:https://www.cnblogs.com/googlegis/p/2978982.html
Copyright © 2011-2022 走看看