WPF中的binding(五)- 使用DataTable作為Binding的源
阿新 • • 發佈:2019-02-12
一、DataTable的DefaultView屬性賦值給ListBox等派生自ItemsControl類的物件。
然後,我們新建一個DataTable物件,並將該物件的DefaultView賦值給ListBox物件的ItemsSource。
這裡我們將一個GridView物件賦值給ListView的View屬性,而在這個GridView物件中,將兩列分別綁定了ID和Name,而DataTable的DefaultView就是一個GridView物件,通過下面的程式碼進行繫結:
this.listBox1.ItemsSource = dt.DefaultView;
執行效果如下:
值得注意的是:
1、這種繫結方式無需再為Datgrid定義列,它會以DataTable的列自動生成列。
2、ItemsSource="{Binding}",這一句必不可少,這一句會告訴編譯器DataGrid的ItemsSource採用繫結的方式,執行時Binding會自動獲取DefaultView作為自己的Source來使用,缺少後將會繫結不成功,資料不能正常顯示。其實也就相當於:
this. datagrid.ItemsSource = dt. DefaultView;
XAML檔案如下,我們設定ListBox的DisplayMemberPath為Name,這樣會在ListBox的列表中顯示DataTable對應的Name列:
<Window x:Class="_6_18.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="350" Width="525"> <Grid> <ListBox Height="208" HorizontalAlignment="Left" Margin="12,12,0,0" Name="listBox1" VerticalAlignment="Top" Width="479" DisplayMemberPath="Name"/> </Grid> </Window>
然後,我們新建一個DataTable物件,並將該物件的DefaultView賦值給ListBox物件的ItemsSource。
執行效果如下:public MainWindow() { InitializeComponent(); DataTable dt = new DataTable(); DataColumn id = new DataColumn("ID"); DataColumn name = new DataColumn("Name"); dt.Columns.Add(id); dt.Columns.Add(name); DataRow row1 = dt.NewRow(); row1["ID"] = "1"; row1["Name"] = "張?三¨y"; dt.Rows.Add(row1); DataRow row2 = dt.NewRow(); row2["ID"] = "2"; row2["Name"] = "李¤?四?"; dt.Rows.Add(row2); DataRow row3 = dt.NewRow(); row3["ID"] = "3"; row3["Name"] = "王ª?五?"; dt.Rows.Add(row3); this.listBox1.ItemsSource = dt.DefaultView; }
這裡,最重要的一句程式碼是 this.listBox1.ItemsSource = dt.DefaultView;DataTable的DefaultView屬性是一個DataView物件,DataView型別實現了IEnumberable介面,可以被賦值給ListBox的ItemsSource屬性。
二、DataTable的DefaultView屬性賦值給ListView的View屬性。
XAML檔案程式碼如下: <Window x:Class="_6_18.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="350" Width="525"> <Grid> <ListView Height="147" HorizontalAlignment="Left" Margin="12,12,0,0" Name="listBox1" VerticalAlignment="Top" Width="479" > <ListView.View> <GridView> <GridViewColumn Header="ID" DisplayMemberBinding="{Binding ID}"/> <GridViewColumn Header="Name" DisplayMemberBinding="{Binding Name}"/> </GridView> </ListView.View> </ListView> </Grid> </Window>
這裡我們將一個GridView物件賦值給ListView的View屬性,而在這個GridView物件中,將兩列分別綁定了ID和Name,而DataTable的DefaultView就是一個GridView物件,通過下面的程式碼進行繫結:
this.listBox1.ItemsSource = dt.DefaultView;
執行效果如下:
二、DataTable物件賦值給DataGrid的DataContext。
XAML檔案程式碼如下:
<Window x:Class="_6_18.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<DataGrid Height="147" HorizontalAlignment="Left" Margin="12,12,0,0" Name="datagrid" VerticalAlignment="Top" Width="479"
ItemsSource="{Binding}">
</DataGrid>
</Grid>
</Window>
後臺通過如下語句進行賦值:
this. datagrid.DataContext = dt;
值得注意的是:
1、這種繫結方式無需再為Datgrid定義列,它會以DataTable的列自動生成列。
2、ItemsSource="{Binding}",這一句必不可少,這一句會告訴編譯器DataGrid的ItemsSource採用繫結的方式,執行時Binding會自動獲取DefaultView作為自己的Source來使用,缺少後將會繫結不成功,資料不能正常顯示。其實也就相當於:
this. datagrid.ItemsSource = dt. DefaultView;