TreeView 树节点的处理

  1 using System;
  2 using System.Collections.Generic;
  3 using System.ComponentModel;
  4 using System.Data;
  5 using System.Drawing;
  6 using System.Linq;
  7 using System.Text;
  8 using System.Threading.Tasks;
  9 using System.Windows.Forms;
 10 using WinForm_CRUD.BLL;
 11 using WinForm_CRUD.Model;
 12 
 13 namespace WinForm_TestTree
 14 {
 15     public partial class Form1 : Form
 16     {
 17         public Form1()
 18         {
 19             InitializeComponent();
 20         }
 21 
 22         MyORM_BLL myORM_BLL = new MyORM_BLL();
 23         
 24         /// <summary>
 25         /// import Area
 26         /// </summary>
 27         /// <param name="sender"></param>
 28         /// <param name="e"></param>
 29         private void btnImportArea_Click(object sender, EventArgs e)
 30         {
 31 
 32         }
 33 
 34         /// <summary>
 35         /// 窗口加载时 省市联动
 36         /// </summary>
 37         /// <param name="sender"></param>
 38         /// <param name="e"></param>
 39         private void Form1_Load(object sender, EventArgs e)
 40         {
 41             LoadAlllNodes();
 42         }
 43 
 44         /// <summary>
 45         /// 加载所有节点
 46         /// </summary>
 47         private void LoadAlllNodes()
 48         {
 49             treeView1.Nodes.Clear();
 50             //根据PID=0查询省
 51             List<Object> list = myORM_BLL.SelectModelByField(typeof(T_AREA), "PID=0");
 52             //for 遍历省
 53             foreach (Object obj in list)
 54             {
 55                 T_AREA area = (T_AREA)obj;
 56                 TreeNode nodePro = new TreeNode(area.NAME);
 57                 nodePro.Tag = area.ID;
 58                 //根据省ID 即PID查询市 遍历市 把市节点加入省(即需要省ID 和省节点递归)
 59                 RecursionCity(nodePro, area);
 60                 //把省节点加入treeview
 61                 treeView1.Nodes.Add(nodePro);
 62             }
 63         }
 64 
 65         /// <summary>
 66         /// 递归加载市和县
 67         /// </summary>
 68         /// <param name="node">上一级节点,比如省节点</param>
 69         /// <param name="area">上一级对象,比如省,提供下一级的PID</param>
 70         private void RecursionCity(TreeNode node, T_AREA area)
 71         {
 72             List<Object> list = myORM_BLL.SelectModelByField(typeof(T_AREA), "PID=" + area.ID);
 73             foreach(Object obj in list)
 74             {
 75                 T_AREA areaCity = (T_AREA)obj;
 76                 TreeNode nodeCity = new TreeNode(areaCity.NAME);
 77                 nodeCity.Tag = areaCity.ID;
 78                 RecursionCity(nodeCity, areaCity); //再次递归获得县节点
 79                 node.Nodes.Add(nodeCity);
 80             }
 81         }
 82 
 83         /// <summary>
 84         /// 删除节点
 85         /// </summary>
 86         /// <param name="sender"></param>
 87         /// <param name="e"></param>
 88         private void btnDeleteNode_Click(object sender, EventArgs e)
 89         {
 90             //判断是否选中
 91             if (treeView1.SelectedNode == null)
 92             {
 93                 MessageBox.Show("请先选中要删除的节点");
 94                 return;
 95             }
 96             string name = treeView1.SelectedNode.Text;
 97             int id = (Int32)treeView1.SelectedNode.Tag;
 98             //提示是否删除
 99             if(MessageBox.Show("您确定要删除节点"+name+"吗?","提示",MessageBoxButtons.OKCancel,MessageBoxIcon.Warning)!=DialogResult.OK)
100             {
101                 return;
102             }
103             //根据ID删除 递归
104             //在根据ID删除省之前,先要删除省下面所有的市,删除每个市之前,先要删除市下面所有的县
105             RecursionDeleteCity(id);
106             myORM_BLL.DeleteModelById(typeof(T_AREA), id);
107             //重新加载数据
108             MessageBox.Show("删除成功");
109             LoadAlllNodes();
110         }
111 
112         /// <summary>
113         /// 根据省ID删除下面的所有市,递归 根据市ID删除下面的所有县
114         /// </summary>
115         /// <param name="id"></param>
116         private void RecursionDeleteCity(int id)
117         {
118             //根据省ID查询所有市
119             List<Object> list = myORM_BLL.SelectModelByField(typeof(T_AREA), "PID=" + id);
120             //for市 
121             foreach(Object obj in list)
122             {
123                 T_AREA areaCity = (T_AREA)obj;
124                 //根据市ID删除之前,先删除市下面的所有的县
125                 RecursionDeleteCity(areaCity.ID);
126                 myORM_BLL.DeleteModelById(typeof(T_AREA), areaCity.ID);
127             }
128         }
129 
130         /// <summary>
131         /// 双击事件 进行编辑
132         /// </summary>
133         /// <param name="sender"></param>
134         /// <param name="e"></param>
135         private void treeView1_DoubleClick(object sender, EventArgs e)
136         {
137             //是否选中
138             if (treeView1.SelectedNode == null)
139             {
140                 MessageBox.Show("请先选中要编辑的节点");
141                 return;
142             }
143             //获得选中的节点
144             TreeNode node = treeView1.SelectedNode;
145             //设置节点为可编辑状态
146             node.BeginEdit();
147             //获得改变的文本
148             T_AREA area=new T_AREA();
149             area.NAME = node.Text.Trim();
150             area.ID = (Int32)node.Tag;
151             area.PID = node.Parent==null?0:(Int32)node.Parent.Tag; //父节点pid
152             //根据节点ID更新
153             bool flag = myORM_BLL.UpdateModel(area);
154             string msg = flag ? "更新成功" : "更新失败";
155             MessageBox.Show(msg);
156             //刷新
157             LoadAlllNodes();
158         }
159 
160         private event EventHandler _evt;
161         private MyEventArg mea = new MyEventArg();
162 
163         /// <summary>
164         /// 新增节点
165         /// </summary>
166         /// <param name="sender"></param>
167         /// <param name="e"></param>
168         private void btnAddNew_Click(object sender, EventArgs e)
169         {
170             //是否选中父节点,如果不选中,默认父节点为0
171             TreeNode node = treeView1.SelectedNode;
172             int id = node == null ? 0 : (Int32)node.Tag;
173             //获得父节点ID,即PID
174             mea.area = new T_AREA();
175             mea.area.PID = id; //新增传PID
176             AddNewAndEdit(1);
177         }
178 
179         /// <summary>
180         /// 编辑节点
181         /// </summary>
182         /// <param name="sender"></param>
183         /// <param name="e"></param>
184         private void btnEdit_Click(object sender, EventArgs e)
185         {
186             //是否选中
187             if (treeView1.SelectedNode == null)
188             {
189                 MessageBox.Show("请先选中要编辑的节点");
190                 return;
191             }
192             //获得节点ID
193             int id = (Int32)treeView1.SelectedNode.Tag;
194             mea.area = new T_AREA();
195             mea.area.ID = id; //编辑传ID
196             mea.area.PID = treeView1.SelectedNode.Parent == null ? 0 : (Int32)treeView1.SelectedNode.Parent.Tag;
197             AddNewAndEdit(2);
198         }
199 
200         /// <summary>
201         /// 编辑和新增
202         /// </summary>
203         /// <param name="p"></param>
204         private void AddNewAndEdit(int p)
205         {
206             mea.Tp = p;
207             Form2 f2 = new Form2();
208             //注册事件
209             this._evt += new EventHandler(f2.SetText);
210             if(this._evt!=null)
211             {
212                 this._evt(this, mea);
213             }
214             if (f2.ShowDialog() == DialogResult.OK)
215             {
216                 f2.Close();
217                 LoadAlllNodes();
218             }
219             else if (f2.ShowDialog() == DialogResult.Cancel)
220             {
221                 f2.Close();
222             }
223         }
224     }
225     public class MyEventArg : EventArgs
226     {
227         /// <summary>
228         /// 1 新增,2 编辑
229         /// </summary>
230         public int Tp { get; set; }
231         /// <summary>
232         /// 节点实例
233         /// </summary>
234         public T_AREA area { get; set; }
235     }
236 }

相关文章:

  • 2021-10-08
  • 2021-12-05
  • 2021-06-12
  • 2021-08-21
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-01-14
  • 2022-12-23
  • 2022-12-23
  • 2021-06-12
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案