• TreeList 的 增加、删除节点-----DevExpress


    1. private void FrmDictionaryManaged_Load(object sender, EventArgs e)
    2. {
    3. // treeList1.DataSource= CreateDataTable();
    4. treeList2.DataSource = CreateTreeList();
    5. // 绑定TreeList控件到数据源
    6. treeList1.DataSource = GetData();
    7. treeList1.KeyFieldName = "ID";
    8. treeList1.ParentFieldName = "ParentID";
    9. this.treeList1.Columns[1].Caption = @"字典测试";//树的名称
    10. // 设置列为只读
    11. treeList1.Columns.Cast().ToList().ForEach(column =>
    12. {
    13. column.OptionsColumn.ReadOnly = true;
    14. column.OptionsColumn.AllowEdit = false;
    15. });
    16. treeList1.Columns["Id"].Visible = false;
    17. }
    18. private BindingList GetData()
    19. {
    20. // 此属性设为true 每个节点前会自动增加一个check框
    21. // treeList1.OptionsView.ShowCheckBoxes = true;
    22. // 此属性设为true 点击复选框时,可设置为半选状态 ??效果还未呈现出来
    23. // treeList1.OptionsBehavior.AllowIndeterminateCheckState = true;
    24. // 这里返回一个包含节点数据的BindingList
    25. // 你可以根据实际情况替换为你自己的数据源
    26. BindingList data = new BindingList
    27. {
    28. new TreeNode { Id = 1, Name = "性别" },
    29. // 其他节点...
    30. };
    31. return data;
    32. }
    33. public class TreeNode
    34. {
    35. public int Id { get; set; }
    36. public string Name { get; set; }
    37. }
    38. public DataTable CreateDataTable()
    39. {
    40. DataTable dt = new DataTable();
    41. //此属性设为true 每个节点前会自动增加一个check框
    42. treeList1.OptionsView.ShowCheckBoxes = true;
    43. //此属性设为true 点击复选框时,可设置为半选状态 ??效果还未呈现出来
    44. treeList1.OptionsBehavior.AllowIndeterminateCheckState = true;
    45. dt.Columns.Add("ID");
    46. dt.Columns.Add("PARENTID");
    47. dt.Columns.Add("NAME");
    48. //为此表增加数据
    49. DataRow dr1 = dt.NewRow();
    50. dr1["ID"] = 1;
    51. dr1["PARENTID"] = 1;
    52. dr1["NAME"] = "类目1";
    53. dt.Rows.Add(dr1);
    54. DataRow dr2 = dt.NewRow();
    55. dr2["ID"] = 2;
    56. dr2["PARENTID"] = 1;
    57. dr2["NAME"] = "商品1";
    58. dt.Rows.Add(dr2);
    59. DataRow dr3 = dt.NewRow();
    60. dr3["ID"] = 3;
    61. dr3["PARENTID"] = 1;
    62. dr3["NAME"] = "商品2";
    63. dt.Rows.Add(dr3);
    64. DataRow dr31 = dt.NewRow();
    65. dr31["ID"] = 7;
    66. dr31["PARENTID"] = 1;
    67. dr31["NAME"] = "类目3";
    68. dt.Rows.Add(dr31);
    69. DataRow dr4 = dt.NewRow();
    70. dr4["ID"] = 4;
    71. dr4["PARENTID"] = 4;
    72. dr4["NAME"] = "类目2";
    73. dt.Rows.Add(dr4);
    74. DataRow dr5 = dt.NewRow();
    75. dr5["ID"] = 5;
    76. dr5["PARENTID"] = 4;
    77. dr5["NAME"] = "商品1";
    78. dt.Rows.Add(dr5);
    79. DataRow dr6 = dt.NewRow();
    80. dr6["ID"] = 6;
    81. dr6["PARENTID"] = 4;
    82. dr6["NAME"] = "商品2";
    83. dt.Rows.Add(dr6);
    84. this.treeList1.DataSource = dt;
    85. this.treeList1.KeyFieldName = "ID";
    86. this.treeList1.ParentFieldName = "PARENTID";
    87. this.treeList1.Columns[0].Caption = "测试";//树的名称
    88. return dt;
    89. }
    90. public DataTable CreateTreeList()
    91. {
    92. DataTable dt = new DataTable();
    93. #region TreeList属性设置
    94. //节点前显示复选框
    95. this.treeList2.OptionsView.ShowCheckBoxes = true;
    96. //此属性设为true 点击复选框时,可设置为半选状态
    97. treeList1.OptionsBehavior.AllowIndeterminateCheckState = true;
    98. #endregion
    99. #region 在TreeList中增加列
    100. //用于标识当前节点和当前节点的父节点
    101. dt.Columns.Add("ID");
    102. dt.Columns.Add("PARENTID");
    103. //第一列数据的名称
    104. dt.Columns.Add("NAME");
    105. //第二列(节点编码的名称)
    106. dt.Columns.Add("CODE");
    107. //第三列(其他)
    108. dt.Columns.Add("OTHERS");
    109. #endregion
    110. #region 添加数据
    111. //第一行数据
    112. DataRow dr1 = dt.NewRow();
    113. dr1["ID"] = 1;
    114. dr1["PARENTID"] = DBNull.Value;
    115. dr1["NAME"] = "根节点1";
    116. dr1["CODE"] = "根节点1编码";
    117. dr1["OTHERS"] = "根节点1的其他信息";
    118. dt.Rows.Add(dr1);
    119. //第二行数据
    120. DataRow dr2 = dt.NewRow();
    121. dr2["ID"] = 2;
    122. dr2["PARENTID"] = 1;
    123. dr2["NAME"] = "当前节点2";
    124. dr2["CODE"] = "当前节点2编码";
    125. dr2["OTHERS"] = "当前节点2的其他信息";
    126. dt.Rows.Add(dr2);
    127. //第三行数据
    128. DataRow dr3 = dt.NewRow();
    129. dr3["ID"] = 3;
    130. dr3["PARENTID"] = 1;
    131. dr3["NAME"] = "当前节点3";
    132. dr3["CODE"] = "当前节点3编码";
    133. dr3["OTHERS"] = "当前节点3的其他信息";
    134. dt.Rows.Add(dr3);
    135. //第四行数据
    136. DataRow dr4 = dt.NewRow();
    137. dr4["ID"] = 4;
    138. dr4["PARENTID"] = DBNull.Value;
    139. dr4["NAME"] = "根节点2";
    140. dr4["CODE"] = "根节点2编码";
    141. dr4["OTHERS"] = "根节点2的其他信息";
    142. dt.Rows.Add(dr4);
    143. //第五行数据
    144. DataRow dr5 = dt.NewRow();
    145. dr5["ID"] = 5;
    146. dr5["PARENTID"] = 4;
    147. dr5["NAME"] = "当前节点5";
    148. dr5["CODE"] = "当前节点5编码";
    149. dr5["OTHERS"] = "当前节点5的其他信息";
    150. dt.Rows.Add(dr5);
    151. //第六行数据
    152. DataRow dr6 = dt.NewRow();
    153. dr6["ID"] = 6;
    154. dr6["PARENTID"] = 4;
    155. dr6["NAME"] = "当前节点6";
    156. dr6["CODE"] = "当前节点6编码";
    157. dr6["OTHERS"] = "当前节点6的其他信息";
    158. dt.Rows.Add(dr6);
    159. #endregion
    160. #region 绑定数据源并设置列名
    161. this.treeList2.DataSource = dt;
    162. this.treeList2.KeyFieldName = "ID";
    163. this.treeList2.ParentFieldName = "PARENTID";
    164. //这句一定要写在上面两句的下面
    165. this.treeList2.Columns[0].Caption = "节点名称";
    166. this.treeList2.Columns[1].Caption = "节点编码";
    167. this.treeList2.Columns[2].Caption = "节点其他信息";
    168. #endregion
    169. return dt;
    170. }
    171. private void 添加ToolStripMenuItem_Click(object sender, EventArgs e)
    172. {
    173. FrmDictionaryTreeEdit frm = new FrmDictionaryTreeEdit();
    174. frm.ShowDialog();
    175. if (frm.DialogResult != DialogResult.OK)
    176. return;
    177. // 创建新节点
    178. var newNode = new TreeNode { Id = GetNewNodeId(), Name = frm.TypeName };
    179. // 获取选中的节点
    180. TreeListNode selectedNode = treeList1.FocusedNode;
    181. //if (selectedNode == null)
    182. //{
    183. // 如果没有选中节点,添加到根节点
    184. treeList1.AppendNode(new object[] { newNode.Id, newNode.Name }, null);
    185. //}
    186. //else
    187. //{
    188. // // 如果有选中节点,添加为选中节点的子节点
    189. // treeList1.AppendNode(new object[] { newNode.Id, newNode.Name }, selectedNode);
    190. // selectedNode.Expanded = true; // 展开选中节点以显示子节点
    191. //}
    192. }
    193. private void 修改ToolStripMenuItem_Click(object sender, EventArgs e)
    194. {
    195. TreeListNode selectedNode = treeList1.FocusedNode;
    196. if (selectedNode != null)
    197. {
    198. FrmDictionaryTreeEdit frm = new FrmDictionaryTreeEdit();
    199. // 获取选中节点的数据
    200. int nodeId = Convert.ToInt32(selectedNode.GetValue("ID"));
    201. frm.TypeName = selectedNode.GetValue("Name").ToString();
    202. frm.ShowDialog();
    203. if (frm.DialogResult != DialogResult.OK)
    204. return;
    205. string editedName = frm.TypeName;
    206. // 更新TreeList中的节点数据
    207. selectedNode.SetValue("Name", editedName);
    208. }
    209. }
    210. private void 删除ToolStripMenuItem_Click(object sender, EventArgs e)
    211. {
    212. TreeListNode selectedNode = treeList1.FocusedNode;
    213. if (selectedNode != null)
    214. {
    215. // 删除选中的节点
    216. treeList1.DeleteNode(selectedNode);
    217. }
    218. }
    219. private int GetNewNodeId()
    220. {
    221. // 这里可以根据需要生成新节点的ID,确保其唯一性
    222. // 例如,你可以查询已存在的节点ID的最大值,然后加1
    223. int maxId = (from TreeListNode node in treeList1.Nodes select Convert.ToInt32(node.GetValue("ID"))).Concat(new[] { -1 }).Max();
    224. return maxId + 1;
    225. }

    控件:TreeList ,GirdControl,ContextMenuStrip

  • 相关阅读:
    《痞子衡嵌入式半月刊》 第 94 期
    JDK源码分析实战系列-PriorityQueue
    【GD32F427开发板试用】BLDC方波驱动测试
    application/octet-stream的问题
    C++的必备入门学习
    下一代 SCA:流水线成分分析
    使用dockerfile文件部署Python+PyWebIO项目
    【笑小枫的SpringBoot系列】【十一】SpringBoot接口日志信息统一记录
    Nomad 系列-安装
    ubuntu 未发现WIFI适配器的多种情况分析
  • 原文地址:https://blog.csdn.net/qq_36074218/article/details/132715978