一、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;