日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

树TreeView控件与DataTable交互添加节点(最高效的方法)

發布時間:2025/3/15 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 树TreeView控件与DataTable交互添加节点(最高效的方法) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

方法一:

View Code 本文轉載:http://dengzebo.blog.163.com/blog/static/18867406201032141742168/


#region?"讀取樹結點從Datatable"

????????///?<summary>

????????
///?讀取樹結點從Datatable"

????????
///?</summary>

????????
///?<param?name="TreeView1">在填充的TreeView控件</param>

????????
///?<param?name="DT">數據源DataTable</param>

????????
///?<param?name="IsAppendNode">是在現有TreeView控件上添加結點,還是清空再添加</param>

????????
///?<param?name="ParentNumberColumnIndex">在DataTable中,代表父節點編號的列索引</param>

????????
///?<param?name="NumberColumnIndex">在DataTable中,代表當前節點編號的列索引</param>

????????
///?<param?name="NameColumnIndex">在DataTable中,代表當前節點名稱的列索引</param>

????????
///?<returns>True/False</returns>

????????public?bool?ReadNodesFromDataTable(TreeView?TreeView1,?DataTable?DT,?bool?IsAppendNode,?int?ParentNumberColumnIndex,?int?NumberColumnIndex,?int?NameColumnIndex)

????????{

????????????try

????????????{

????????????????if?(IsAppendNode?==?false)

????????????????{

????????????????????TreeView1.Nodes.Clear();

????????????????}

????????????????if?(DT?!=?null?&&?DT.Rows.Count?>?0)

????????????????{

????????????????????DataRow[]?DR?=?null;

????????????????????DR?=?DT.Select(DT.Columns[ParentNumberColumnIndex].ColumnName?+?"=''?or?"?+?DT.Columns[ParentNumberColumnIndex].ColumnName?+?"='0'?or?"?+?DT.Columns[ParentNumberColumnIndex].ColumnName?+?"?is?null");//先將頂級的查出來
????????????????????for?(int?I?=?0;?I?<=?DR.Length?-?1;?I++)//先將頂級的加入到TreeView中
????????????????????{

????????????????????????TreeNode?TNode?=?new?TreeNode(DR[I][DT.Columns[NameColumnIndex].ColumnName].ToString());

????????????????????????TNode.Tag?=?DR[I][DT.Columns[NumberColumnIndex].ColumnName].ToString();

????????????????????????TNode.Name?=?DR[I][DT.Columns[NameColumnIndex].ColumnName].ToString();

????????????????????????TreeView1.Nodes.Add(TNode);

????????????????????}

????????????????????for?(int?I?=?0;?I?<=?TreeView1.Nodes.Count?-?1;?I++)//再遞歸遍歷結點
????????????????????{

????????????????????????ForTreeNodeFormDT(TreeView1.Nodes[I],?DT,?ParentNumberColumnIndex,?NumberColumnIndex,?NameColumnIndex);

????????????????????}

????????????????}

????????????????return?false;

????????????}

????????????catch

????????????{

????????????????return?true;

????????????}

????????}

?

????????///?<summary>

????????
///?從DT中遞歸遍歷出結點
????????
///?</summary>

????????
///?<param?name="TempNode">傳入的頂級結點</param>

????????
///?<param?name="DT">保存TreeView結構的DataTable</param>

????????
///?<param?name="ParentNumberColumnIndex">在DataTable中,代表父節點編號的列索引</param>

????????
///?<param?name="NumberColumnIndex">在DataTable中,代表當前節點編號的列索引</param>

????????
///?<param?name="NameColumnIndex">在DataTable中,代表當前節點名稱的列索引</param>

????????private?void?ForTreeNodeFormDT(TreeNode?TempNode,?DataTable?DT,?int?ParentNumberColumnIndex,?int?NumberColumnIndex,?int?NameColumnIndex)

????????{

????????????string?TTag?=?null;

????????????TTag?=?TempNode.Tag.ToString();

????????????DataRow[]?DR?=?null;

????????????DR?=?DT.Select(DT.Columns[ParentNumberColumnIndex].ColumnName?+?"='"?+?TTag?+?"'");

?

????????????for?(int?I?=?0;?I?<=?DR.Length?-?1;?I++)

????????????{

????????????????TreeNode?TNode?=?new?TreeNode(DR[I][DT.Columns[NameColumnIndex].ColumnName].ToString());

????????????????TNode.Tag?=?DR[I][DT.Columns[NumberColumnIndex].ColumnName].ToString();

????????????????TNode.Name?=?DR[I][DT.Columns[NameColumnIndex].ColumnName].ToString();

????????????????TempNode.Nodes.Add(TNode);

????????????}

?

????????????foreach?(TreeNode?aNode?in?TempNode.Nodes)

????????????{

????????????????ForTreeNodeFormDT(aNode,?DT,?ParentNumberColumnIndex,?NumberColumnIndex,?NameColumnIndex);

????????????}

????????}

????????#endregion

?

?

方法二:

?

做分類 經常會用到無限級別的分類? 先介紹一下數據庫的表結構

tid? 類別編號

tname 類別名稱

pid 父類編號

測試數據就不寫了,大家可以自己插入一下試試

查詢制定類別的 所有的子類?? sql 的 代碼

with as 遞歸查詢 alter proc proc_chaxun (@tid int ) as begin with tt as (select tid,tname,pid from dbo.t_goodsType where tid=@tidunion allselect t.tid,t.tname,t.pid from dbo.t_goodsType t inner join tton t.pid=tt.tid)select * from tt end

查詢之后獲取記錄集?? 綁定到前臺的 TreeView 上面

遞歸進行添加 /// <summary>/// 給Tree 綁定數據 遞歸添加子節點/// </summary>/// <param name="dv">數據視圖</param>/// <param name="tnOld">添加數據的節點</param>public void TreeDataBind(DataView dv,TreeNode tnOld){TreeNode tnNew; //創建一個新的節點foreach (DataRowView drv in dv){//為新的借點設置屬性 tnNew = tnOld.Nodes.Add(drv["tname"].ToString());tnNew.Tag = drv["tid"];//過濾數據視圖 父類id = 上一級的tiddv.RowFilter = "pid=" + drv["tid"].ToString();//自己調用自己 TreeDataBind(dv, tnNew);}}

調用的方法很簡單

調用 DataTable dtRet = (DataTable)dh.ExecProcRetObj(ep); DataView dv = new DataView(dtRet);dv.RowFilter = "pid=0"; TreeDataBind(dv, this.treeView1.Nodes.Add("商品類別"));

效果

?

[知識分享] LINQ TO SQL 實現無限遞歸查詢

本文轉載:http://blog.csdn.net/q107770540/article/details/7708418

List<DetptInfo> lstDept = new List<DetptInfo> { new DetptInfo {ID=1,DeptName="公司",ParentID=0}, new DetptInfo {ID=10,DeptName="軟件中心",ParentID=1}, new DetptInfo {ID=11,DeptName="綜合辦公室",ParentID=1}, new DetptInfo {ID=100,DeptName="人力資源部",ParentID=11}, new DetptInfo {ID=101,DeptName="行政部",ParentID=11}, };public static List<DetptInfo> GetSonID(List<DetptInfo> lstDept, int p_id) { var query = from c in lstDept where c.ParentID == p_id select c;return query.Concat(query.SelectMany(t => GetSonID(lstDept, t.ID))).ToList(); }--調用:var query = GetSonID(lstDept, 0); Console.WriteLine("Id\tName\tParent");query.ToList().ForEach(q => Console.WriteLine("{0}\t{1}\t{2}", q.ID, q.DeptName, q.ParentID));

  

總結

以上是生活随笔為你收集整理的树TreeView控件与DataTable交互添加节点(最高效的方法)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。