c++ listnode,Dev TreeList常用用法

 2023-11-09 阅读 18 评论 0

摘要:  工作中經常用的的是第三發控件Developer Express,相信大家都知道它的強大功能,這次用到了TreeList做了一個權限的管理,發現TreeList非常好用,大家可以看它自帶的 Demo就知道了,功能很多,這里我就把我用到的說出來,大家一

  工作中經常用的的是第三發控件Developer Express,相信大家都知道它的強大功能,這次用到了TreeList做了一個權限的管理,發現TreeList非常好用,大家可以看它自帶的 Demo就知道了,功能很多,這里我就把我用到的說出來,大家一起交流學習。

?Skelta BPM.NET(全球第一.NET工作流引擎)?Visual WebGui (完美的用戶界面解決方案)
?List & Label(圖表報表生成控件)?DXperience Uni Premium 白金版(慧都獨家)

  TreeList有一個KeyFieldName和ParentFieldName,這2個非常重要,只要構造一個DataTable賦值給 TreeList的DataSource,這個DataTable里面要有2列是必須的,因為這2列要賦給上面說的KeyFieldName和 ParentFieldName,先不說上面意思,樹應該是從根節點遞歸、遞歸、一直往下遞歸到葉子,KeyFieldName和 ParentFieldName就起到這個作用,比如:下面的一個DataTable:

KeyFieldNameParentFieldNameNodeNameNodeCodeOthers
1Null根節點1名稱根節點1編碼其他
21節點1子節點名稱節點1子節點編碼其他
31節點1子節點名稱節點1子節點編碼其他
4Null根節點4名稱根節點4編碼其他
54節點4子節點名稱節點4子節點編碼其他
65節點5子節點名稱節點5子節點編碼其他

c++ listnode、  這時,如果把這個DataTable賦給TreeList的話,就會產生下面的一棵樹:

?

下面是一個構造TreeList的數據源的簡單示例:

代碼
/// <summary>

/// 構造一棵樹型表結構

/// </summary>

/// <returns></returns>

private DataTable CreateTreeListTable()

{

DataTable dt = new DataTable();

DataColumn dcOID = new DataColumn("KeyFieldName", Type.GetType("System.Int32"));

DataColumn dcParentOID = new DataColumn("ParentFieldName", Type.GetType("System.Int32"));

DataColumn dcNodeName = new DataColumn("NodeName", Type.GetType("System.String"));

DataColumn dcNodeCode = new DataColumn("NodeCode", Type.GetType("System.String"));

DataColumn dcOthers = new DataColumn("Others", Type.GetType("System.String"));

dt.Columns.Add(dcOID);

dt.Columns.Add(dcParentOID);

dt.Columns.Add(dcNodeName);

dt.Columns.Add(dcNodeCode);

dt.Columns.Add(dcOthers);

//以上代碼完成了DataTable的構架,但是里面是沒有任何數據的

DataRow dr1 = dt.NewRow();

dr1["KeyFieldName"] = 1;

dr1["ParentFieldName"] = DBNull.Value;

dr1["NodeName"] = "根節點名稱";

dr1["NodeCode"] = "根節點編碼";

dr1["Others"] = "其他";

dt.Rows.Add(dr1);

DataRow dr2 = dt.NewRow();

dr2["KeyFieldName"] = 2;

dr2["ParentFieldName"] = 1;

dr2["NodeName"] = "節點子節點名稱";

dr2["NodeCode"] = "節點子節點編碼";

dr2["Others"] = "其他";

dt.Rows.Add(dr2);

DataRow dr3 = dt.NewRow();

dr3["KeyFieldName"] = 3;

dr3["ParentFieldName"] = 1;

dr3["NodeName"] = "節點子節點名稱";

dr3["NodeCode"] = "節點子節點編碼";

dr3["Others"] = "其他";

dt.Rows.Add(dr3);

DataRow dr4 = dt.NewRow();

dr4["KeyFieldName"] = 4;

dr4["ParentFieldName"] = DBNull.Value;

dr4["NodeName"] = "根節點名稱";

dr4["NodeCode"] = "根節點編碼";

dr4["Others"] = "其他";

dt.Rows.Add(dr4);

DataRow dr5 = dt.NewRow();

dr5["KeyFieldName"] = 5;

dr5["ParentFieldName"] = 4;

dr5["NodeName"] = "節點子節點名稱";

dr5["NodeCode"] = "節點子節點編碼";

dr5["Others"] = "其他";

dt.Rows.Add(dr5);

DataRow dr6 = dt.NewRow();

dr6["KeyFieldName"] = 6;

dr6["ParentFieldName"] = 5;

dr6["NodeName"] = "節點子節點名稱";

dr6["NodeCode"] = "節點子節點編碼";

dr6["Others"] = "其他";

dt.Rows.Add(dr6);

return dt;

}

?

java arraylist和linkedlist區別。好了,一個TreeList構造完成,下面就是TreeList的一些常用用法,都比較簡單,這里就直接上代碼了,代碼中有簡單的注釋,大家一看就明白哦。

代碼
/// <summary>

/// 點擊節點前

/// </summary>

/// <param name="sender"></param>

/// <param name="e"></param>

private void treeLstModuleAction_BeforeCheckNode(object sender, DevExpress.XtraTreeList.CheckNodeEventArgs e)

{

e.State = (e.PrevState == CheckState.Checked ? CheckState.Unchecked : CheckState.Checked);

}

/// <summary>

/// 點擊節點后

/// </summary>

/// <param name="sender"></param>

/// <param name="e"></param>

private void treeLstModuleAction_AfterCheckNode(object sender, DevExpress.XtraTreeList.NodeEventArgs e)

{

SetCheckedChildNodes(e.Node, e.Node.CheckState);

SetCheckedParentNodes(e.Node, e.Node.CheckState);

}

/// <summary>

/// 選擇子節點時觸發

/// </summary>

/// <param name="node"></param>

/// <param name="check"></param>

private void SetCheckedChildNodes(TreeListNode node, CheckState check)

{

for (int i = 0; i < node.Nodes.Count; i++)

{

node.Nodes[i].CheckState = check;

SetCheckedChildNodes(node.Nodes[i], check);

}

}

/// <summary>

/// 選擇父節點時觸發

/// </summary>

/// <param name="node"></param>

/// <param name="check"></param>

private void SetCheckedParentNodes(TreeListNode node, CheckState check)

{

if (node.ParentNode != null)

{

bool b = false;

CheckState state;

for (int i = 0; i < node.ParentNode.Nodes.Count; i++)

{

state = (CheckState)node.ParentNode.Nodes[i].CheckState;

if (!check.Equals(state))

{

b = !b;

break;

}

}

node.ParentNode.CheckState = b ? CheckState.Indeterminate : check;

SetCheckedParentNodes(node.ParentNode, check);

}

}

/// <summary>

/// 判斷此節點下的所有孩子節點是否選中

/// </summary>

/// <param name="node"></param>

/// <returns></returns>

private Boolean IsChildsChecked(TreeListNode node)

{

for (int i = 0; i < node.Nodes.Count; i++)

{

if (node.Nodes[i].CheckState == CheckState.Unchecked)

return false;

if (node.Nodes[i].HasChildren)

IsChildsChecked(node.Nodes[i]);

}

return true;

}

?

好了,至此,關于TreeList的一些常用用法就說到這了,大家如果有好的想法,請不吝賜教,謝謝!

arraylist類的方法,轉載于:https://www.cnblogs.com/gaoxuzhao/archive/2011/10/14/2212125.html

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/4/168667.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息