WPF中的binding(五)- 使用DataTable作为Binding的源

一、DataTable的DefaultView属性赋值给ListBox等派生自ItemsControl类的对象。

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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值