在專案中經常會遇到從資料庫查詢資料繫結到treeview上,這時我們需要將查詢出來的資料轉換成樹形結構資料,每次寫覺得工作會很重複,所以寫了乙個通用的轉換類。
第一步,我們需要建乙個基類,這個基類的意義主要是擴充套件資料庫實體類做連線用,用於確定樹形結構中節點與子項的關係,
其中parent為當前節點的父節點,children為當前節點的子節點,islinked是判斷當前節點是否已連線,用於防止資料中有迴圈依賴導致建立樹的時候形成死迴圈。
treemodel基類
publicclass treebase
set
}//////
父節點
/// public t parent
//////
子節點
/// public observablecollectionchildren
}
第二步,我們需要建立乙個連線方法,將輸入的扁平狀資料轉換為樹狀結構,我希望在使用的時候可以自己指定實體的哪個屬性為id,哪個為父id
,這裡我們使用了expression,這樣就可以使用linq表示式去指定屬性了,剩下的就是利用反射獲取實體的值與遞迴連線了,這樣乙個簡單的通用建立樹的方法就有了。
publicclass
treehelper
);foreach (var leaf in
root.children)
}//////
建立多個根節點的樹
/// ///
實體型別
///根節點 ///
所有資料
///節點唯一標識屬性表示式
///父節點屬性表示式
public
static observablecollectioncreatetree(ilistlist, expressionobject>> idproperty, expressionobject>> parentidproperty) where t : treebase
return
roots;
}private
static
object getpropertyvalue(t t, string
propertyname)
private
static
string getmembername(expression>propertyselector)
return
propertyexp.member.name;
}}
使用示例:
先宣告乙個繫結實體,繼承自treebase
publicclass item : treebase
public string parentid
public string displaytext
}
建立測試資料
ilistdata = new list();var group1= new item();
var item1 = new item ;
var item2 = new item ;
var item3 = new item ;
var item4 = new item() ;
var item5 = new item() ;
var item6 = new item() ;
data.add(group1);
data.add(item1);
data.add(item2);
data.add(item3);
data.add(item4);
data.add(item5);
data.add(item6);
介面模板繫結
<treeview
height
="245"
horizontalalignment
="left"
margin
="46,35,0,0"
name
="treeview1"
verticalalignment
="top"
width
="156"
>
<
treeview.itemtemplate
>
<
hierarchicaldatatemplate
itemssource=""
>
<
textblock
text=""
>
textblock
>
hierarchicaldatatemplate
>
treeview.itemtemplate
>
treeview
>
後台資料繫結
treeview1.itemssource = treehelper.createtree(data, item => item.id, item => item.parentid);
以後繫結樹形資料是不是很簡單呢?
這種方法不適應主鍵為guid的資料型別
因為以下**無法獲取guid型別的名稱,歡迎各位大叔,大嬸,大神們指點
privatestatic
string getmembername(expression>propertyselector)
return
propertyexp.member.name;
}
將扁平資料轉成樹狀資料
將扁平資料轉成樹狀資料,轉化中間可以新增自己想要的字段 序號等等 export const flattranstree ids,list else brancharr.length 0?father.children brancharr return father.pid 0 return newa...
資料鏈的建立和資料鏈的輸出
本次程式主要實現資料鏈的儲存和輸出,並把輸出的數值寫在乙個檔案中 本程式的主要 是在定義 lnode p l next 定義乙個結點指標p指向頭結點的下乙個結點 還有資料鏈建立之後,資料鏈上得指標不能返回,只有利用創立的方法中呼叫修改資料鏈的方法 再寫方法 方法中套方法 include includ...
資料鏈路協議
鏈路就是一條無源的從點到點的物理線路段,中間沒有任何其他的交換節點。在進行通訊時,兩台計算機的通訊通路是由多條鏈路串接而成的。當需要在一條鏈路上通訊時,除了需要物理鏈路,還需要一些規程來控制這些資料的傳輸,把實現這些規程的硬體和軟體加到鏈路上,就構成了資料鏈路 差錯控制自動請求重發又可以稱為後向糾錯...