如何绑定数据集到WPF设计器

Categories: Data, WPF
Tags: No Tags
Comments: No Comments
Published on: 2010 年 06 月 18 日

[原文作者]:Yao Hai

[原文链接]:WPF Data Binding: How to Bind DataSet to WPF Designer

        在我们前面的章节中,对于WPF数据绑定方案,我们常常使用的是实体数据模型作为ORM(对象关系映射)层。

        同时,自从数据集的广泛使用, 我们也提供对数据集作为数据源在数据绑定方法。下面的例子是使用C#一步一步实现的,这个例子是基于Visual Studio 2010 Beta2 版本。

绑定数据集到WPF 设计器

        1. 打开Visual Studio 从主菜单: 文件->新建项目,选择WPF 应用程序 创建一个新的C#应用程序。这里我们就使用项   目默认的名称: WpfApplication1。

        2. 从主菜单: 数据-> 增加新的数据源…->数据库->数据集触发数据源向导。

        3. 根据这个向导连接到数据库Northwind,然后选择表Customers,Orders。完成这一步以后,下面的截图就是数据库显示的状态。

image 

        4. 从主菜单: 数据->显示数据源显示数据源工具窗口,确保MainWindow.xaml是个活动的窗口。

        5. 切换到数据源工具窗口,你可以单击”Customers” 节点和下拉菜单。在context菜单中, 选择”自定义…”, 一个”自定义控制绑定”的对话框弹出, 在组合框中选择”[List]”作为数据类型。

image

        6. 绑定”Customers”表到组合框控件,经过上面的步骤后,下面的是拖放前的快照。从这个图标中,你可以看到”Customers” 已经绑定到组合框。

image

        7. 把”Customers”表拖到左上角,然后把”Customers.Orders”拖到WPF设计器的中间。布局如下面所示:

clip_image004[4]

        这些步骤以后, 一个简单的数据集 Master-Detail应用程序已经创建。你可以按下”Ctrl + F5”运行这个程序去查看这个数据。

说明:

        在第五步中,有2部分代码生成: 一部分是xaml标记代码和C#的后台代码。这些代码是用着示范。我解释一下它们之间的对应关系以至于提供一个指导方案来修改这些代码。

        这些xaml代码,除了标记控制/数据绑定外,它们都相同的使用了EDM作为PRM层。它也生成资源块。

<Window.Resources>

        <my:NorthwindDataSet x:Key="NorthwindDataSet" />

        <CollectionViewSource x:Key="customersViewSource" Source="{Binding Path=Customers, Source={StaticResource NorthwindDataSet}}" />

        <CollectionViewSource x:Key="customersOrdersViewSource" Source="{Binding Path=FK_Orders_Customers, Source={StaticResource customersViewSource}}" />

</Window.Resources>

        第一行定义了一个NorthwindDataSet的实例,它具体到数据集。所以当一个窗口初始化时,就有一个数据集实例创建。第二和第三行代码是利用CollectionViewSource做master-details data-binding。

下面的是C#代码:

private void Window_Loaded(object sender, RoutedEventArgs e)

{

WpfApplication1.NorthwindDataSet NorthwindDataSet = ((WpfApplication1.NorthwindDataSet)(this.FindResource("NorthwindDataSet")));

// Load data into the table Customers. You can modify this code as needed.

WpfApplication1.NorthwindDataSetTableAdapters.CustomersTableAdapter northwindDataSetCustomersTableAdapter = new WpfApplication1.NorthwindDataSetTableAdapters.CustomersTableAdapter();

northwindDataSetCustomersTableAdapter.Fill(NorthwindDataSet.Customers);

System.Windows.Data.CollectionViewSource customersViewSource = ((System.Windows.Data.CollectionViewSource)(this.FindResource("customersViewSource")));

customersViewSource.View.MoveCurrentToFirst();

// Load data into the table Orders. You can modify this code as needed.

WpfApplication1.NorthwindDataSetTableAdapters.OrdersTableAdapter northwindDataSetOrdersTableAdapter = new WpfApplication1.NorthwindDataSetTableAdapters.OrdersTableAdapter();

northwindDataSetOrdersTableAdapter.Fill(NorthwindDataSet.Orders);

System.Windows.Data.CollectionViewSource customersOrdersViewSource = ((System.Windows.Data.CollectionViewSource)(this.FindResource("customersOrdersViewSource")));

customersOrdersViewSource.View.MoveCurrentToFirst();

}

        第一行,从WPF设计资源字典得到一个数据集实例。第二行是导入Customers数据到表中。当然你也可以用你喜欢的数据集实例替换它。第三和第四行是初始化CollectionViewSource。第5到7行,对于Customers.Orders表,和第二、第四行相似。

        你可能注意到当应用程序开始运行时数据开始导入。如果你想根据需要导入,你可以把这些代码放到事件中比如按钮的单击事件或者其他的一些事件。

No Comments - Leave a comment

Leave a comment


Welcome , today is 星期六, 2017 年 02 月 25 日