WPF TreeView 繫結到層次結構資料庫

2021-09-05 20:44:43 字數 2840 閱讀 3591

wpf treeview

繫結到層次結構資料庫

首先在sql server

中建立下面的層次資料庫

instance

資料庫,包含兩個父子表

例項表i1

字段資料型別

描述i1_id

int例項id(

pk)i1_name

varchar(50)

例項名稱

子例項表i2

字段資料型別

描述i2_id

int子例項id(

pk)i1_id

int所屬例項id(

fk)i2_name

varchar(50)

子例項名稱

注意這裡要建立兩個表的外來鍵關係

使用visual studio 2008

建立乙個

wfp工程

,命名為

i12

使用data—>add new datasource

下的建立乙個新的連線,選擇

填寫好資料庫的連線資訊並測試連線

選擇資料表

選擇完成,這時,

visual studio

會自動生成幾千行的**。

instancedataset.designer.cs中。

由於這些自動生成的**是為

.net2.0

的windows form

所量身定做的。當時還沒有考慮的

wpf的情況。

wpf中要求的物件是要由無引數建構函式完成所有構造的。而

instancedataset

類是乙個

dataset

類的子類,雖然它含有無引數的建構函式,但是,必須通過相應的強型別表介面卡進行填充才能完成構造,因此如果直接在

xaml

中構造乙個

instancedataset

物件由於資料集是空的,所以

treeview

中什麼都不會有。

解決的方法是使用

objectdataprovider

物件,objectdataprovider

物件可以以方法或屬性的方式提供乙個物件,這樣我們可以構造乙個

instancedatasetprovider

類,使它的某個方法

createinst

返回乙個填充好的

instancedataset

,再將它作為

treeview

的datacontent。

其**如下:

namespace

i12

} }

對應的xaml檔案如下

<

windowx:

class

="i12.window1"

xmlns

=""xmlns:x

=""xmlns

:local

="clr-namespace:i12"

title

="window1"

height

="300"

width

="300">

<

window.resources

>

<

objectdataproviderx:

key="inst1"

objecttype

=""methodname

="createinst" />

<

datatemplatex:

key="tmp_i2" >

<

textblock

text

="" />

datatemplate

>

<

hierarchicaldatatemplatex:

key="tmp_i1"

itemssource

=""itemtemplate

="" >

<

textblock

text

="" />

hierarchicaldatatemplate

>

window.resources

>

<

grid

datacontext

="">

<

treeview

margin

="28,31,130,31"

name

="treeview1"

itemssource

=""itemtemplate

=""/>

grid

>

window

>

而使用objectdataprovider

的另乙個好處就是可以在設計時就看到繫結的效果。如下圖所示:

WPF TreeView遞迴非同步繫結

using system using system.collections.generic using system.linq using system.text using system.componentmodel using system.collections.objectmodel nam...

應用層到驅動層

1 應用層 vfs 驅動層 硬體層 2 應用層的程式要想跟底層的硬體打交道必須要有裝置檔案 在應用層通過open開啟乙個裝置檔案時,在vfs層會建立inode結構體和file結構體,前者是靜態的描述裝置的一些資訊 如 裝置號,節點指標,裝置型別以及cdev結構體 後者則會描述裝置型別的一些動態資訊 ...

繫結Enum到DropDownList控制項的方法

有時,需要將乙個列舉型別繫結到dropdownlist供使用者選擇,這主要是enum.getnames和enum.getvalues的使用。方法如下 dropdownlist.datasource enum.getnames typeof yourenumtype dropdownlist.data...