给我留言 | 加入收藏 | 设为首页 | 会员中心 | 我要投稿 | RSS
| PHP | ASP | JAVA | .NET | FLASH | AJAX | MYSQL | PGSQL | MSSQL | DB2 | ORACLE | SYBASE | Html/Css | 服务器相关 | IOS |
您当前的位置:首页 > WEb开发 > DB2

使用IBM Database Add-ins for Visual Studio 生成数据绑定 XAML 应用程序

时间:2009-11-14 17:56:32  来源:IBM  作者:IBM
IBM® 现在支持新的 .NET Framework 3.5 Windows® Presentation Foundation (WPF),允许用户创建直接映射到任何 IBM 数据服务器关系对象的数据绑定 Extensible Application Markup Language (XAML) 应用程序。可以使用 IBM Database Add-ins for Visual Studio 工具集创建数据绑定 XAML 应用程序,而不需要深入了解 XAML 和 IBM 数据库。Microsoft® WPF 为构建应用程序和在 Windows Vista 中实现非常真实的体验提供坚实的基础,有助于组合应用程序用户界面、文档和媒体内容,同时充分利用计算机的处理能力。WPF 是一种在 Windows 平台上轻松地创建应用程序的新技术。它提供一个简单的界面,可以满足应用程序对图形、图像、音频和视频的需求。

IBM Database Add-ins for Visual Studio 使 WPF 的用户能够方便地为 XAML 应用程序创建数据库数据源。IBM Visual Studio Add-ins 在生成的 XAML 应用程序中创建三种数据库绑定:

  • 自由文本:演示如何把文本框绑定到表列
  • 列表框:演示如何把列表框绑定到表列
  • 网格:演示如何把网格视图绑定到表

前提条件

要想使用 IBM Database Add-ins for Visual Studio 的 XAML 生成特性创建 WPF 应用程序,必须具备以下条件:

  • Visual Studio 2008 Professional Edition
  • IBM Database Client, V9.5 FP2 或更高版本
  • IBM Database Add-ins for Visual Studio, Version 9.5 FP2 或更高版本
  • 对一个 IBM 数据库(DB2® 或 Informix®)的访问权

本文还假设读者熟悉 IBM Database Add-ins for Visual Studio。要想更熟悉 IBM Database Add-ins for Visual Studio 的特性,请阅读 “面向 Visual Studio 2005 开发人员的 DB2 UDB,第 1 部分:针对 Visual Studio 2005 的 IBM 数据库插件概述”(developerWorks,2005 年 12 月)和 Develop proof-of-concepts .NET applications 教程系列。

WPF 概念和 .NET Framework 3.0 的新用户可以通过以下参考资料了解这种新技术:

WPF on Microsoft .NET Framework

Microsoft Windows Client .NET

Windows Presentation Foundation on MSDN .NET Framework Developer Center

创建 WPF 应用程序

本文讨论如何创建一个连接 IBM 数据库服务器的 XAML 应用程序,并讲解在 XAML 应用程序中如何显示和同步数据。在这个示例应用程序中,把 Employee 表中的信息绑定到一个 XAML 表单。在执行此应用程序时,一个列表框显示所有职员 ID。在选择一个 ID 时,与此 ID 相关的所有记录显示在指定的文本框中,所选职员的详细信息显示在一个网格中。这个示例应用程序说明使用这种技术是多么简单,用户可以使用示例代码定制自己的应用程序。

启动 Visual Studio 2008 并创建数据库连接。在 Server Explorer 中右键单击 Data Connection 并选择 Add Connection,这会启动 Add connection 对话框,见图 1。


图 1. Add Connection
Add Connection

在 Data Source 字段中,选择 IBM DB2, IDS and U2 Servers (IBM DB2, IDS, and U2 Data Provider for .NET Framework),提供服务器名、用户 ID 和密码。单击 Test Connection 检查连接是否成功。单击 OK


图 2. Add Connection 对话框
Add Connection 对话框

展开连接下面的 Tables 节点。


图 3. 展开 Tables 节点
展开 Tables 节点

可以在 Server Explorer 中选择一个表、视图或存储过程来创建 XAML 应用程序。

右键单击 EMPLOYEE 表并在上下文菜单中选择 Generate XAML application


图 4. Generate XAML application
Generate XAML application

这时会使用所选的对象生成 XAML 应用程序,其中包含上面提到的所有绑定类型的组合。


图 5. 生成的 XAML 应用程序
生成的 XAML 应用程序

为 Employee 表生成的应用程序和 XAML 见图 6。


图 6. 生成的 XAML 应用程序 2
生成的 XAML 应用程序 2

生成的 XAML 代码如下:


清单 1. 生成的 XAML 代码
				<!-- <snippet1> --><!-- <snippet2> --><Window x:Class="IBMWPFSampleApp.Window1"    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"    xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"     Title="Employee Information"    Loaded="WindowLoaded" Width="595" Height="650" AllowsTransparency="False"         Background="LightSteelBlue" ShowInTaskbar="True">	<!-- </snippet2> --><!-- <snippet8> -->	<Grid x:Name="mainGrid">	<!-- </snippet8> -->		<!-- <snippet3> -->		<Grid.Resources>			<DataTemplate x:Key="ListItemsTemplate">				<TextBlock Text="{Binding Path=EMPNO}"/>			</DataTemplate>		</Grid.Resources>		<!-- </snippet3> -->		<!-- <snippet4> -->		<Grid.RowDefinitions>			<RowDefinition Height="Auto" MinHeight="238" />			<RowDefinition Height="307"/>			<RowDefinition Height="3"/>		</Grid.RowDefinitions>		<Grid.ColumnDefinitions>			<ColumnDefinition Width="181*" />            <ColumnDefinition Width="46*" />            <ColumnDefinition Width="100*" MinWidth="75" />			<ColumnDefinition Width="2*" />            <ColumnDefinition Width="183*" />            <ColumnDefinition Width="61*" />        </Grid.ColumnDefinitions>		<!-- </snippet4> -->		<!-- <snippet5> -->		<StackPanel Orientation="Vertical" Grid.Column="4"                 HorizontalAlignment="Right" Margin="0,0,84.677,0" Width="0"></StackPanel>		<!-- </snippet5> -->		<!-- <snippet6> -->		<StackPanel Orientation="Vertical" Grid.ColumnSpan="2"                 HorizontalAlignment="Left">			<Label Margin="20,5,5,0">EMPNO</Label>			<ListBox x:Name="listBox1" Height="216" Width="202"                 HorizontalAlignment="Left"                      ItemTemplate="{StaticResource ListItemsTemplate}"                     IsSynchronizedWithCurrentItem="True" Margin="20,5,5,5"                     Background="BurlyWood" />		</StackPanel>		<StackPanel Orientation="Vertical" Grid.Column="4"                 HorizontalAlignment="Right" Height="238.277" VerticalAlignment="Top"                 Width="51" Margin="0,0,33.677,0"></StackPanel>		<!-- </snippet6> -->				<!-- <snippet7> -->		<WindowsFormsHost Grid.Row="1" Grid.ColumnSpan="5" Margin="20,5,38.677,2">			<wf:DataGridView x:Name="dataGridView1"/>		</WindowsFormsHost>        <TextBox Margin="0,33.277,0,0" Text="{Binding Path=EMPNO}" Grid.Column="2"         Height="19.277" VerticalAlignment="Top" HorizontalAlignment="Left" Width="68" />        <Label Margin="1,4,0,0" Grid.Column="2" Height="23.277"         VerticalAlignment="Top" HorizontalAlignment="Left" Width="68">EMPNO:</Label>        <Label Height="23.277" HorizontalAlignment="Left" Margin="1,67,0,0"         VerticalAlignment="Top" Width="68" Grid.Column="2">First Name:</Label>        <TextBox Height="19.277" HorizontalAlignment="Left" Margin="1,88,0,0"         Text="{Binding Path=FIRSTNME}" VerticalAlignment="Top" Width="68"         Grid.Column="2" />        <Label Height="23.277" HorizontalAlignment="Left" Margin="1,113,0,0"         VerticalAlignment="Top" Width="68" Grid.Column="2">Last Name:</Label>        <TextBox Height="19.277" HorizontalAlignment="Left" Margin="1,0,0,103"         Text="{Binding Path=LASTNAME}" VerticalAlignment="Bottom" Width="68"         Grid.Column="2" />        <!-- </snippet7> --></Grid></Window><!-- </snippet1> -->

还会自动地生成数据绑定代码和数据同步代码。下面是 IBM Database Visual Studio Add-in 为绑定 Employee 表生成的 C# 代码:


清单 2. 生成的代码
				namespace IBMWPFSampleApp{    public partial class Window1 : Window    {        //<snippet11>        private System.Windows.Forms.BindingSource sampleBindingSource;        private  SampleDataset  smplDataSet;        private SampleDatasetTableAdapters.EMPLOYEETableAdapter  dept1TableAdapter =             new SampleDatasetTableAdapters.EMPLOYEETableAdapter() ;        //</snippet11>        //<snippet12>        public Window1()        {            InitializeComponent();            // Create a DataSet for the EMPLOYEE data.            this.smplDataSet = new SampleDataset();            this.smplDataSet.DataSetName = "smplDataSet";            // Create a BindingSource for the EMPLOYEE data.            this.sampleBindingSource = new System.Windows.Forms.BindingSource();            this.sampleBindingSource.DataMember = "EMPLOYEE";            this.sampleBindingSource.DataSource = this.smplDataSet;        }        //</snippet12>          //<snippet13>        private void WindowLoaded(object sender, RoutedEventArgs e)        {            // Fill the Employee  table adapter with data.            this.dept1TableAdapter.ClearBeforeFill = true;            this.dept1TableAdapter.Fill(this.smplDataSet.EMPLOYEE);            // Assign the BindingSource to             // the data context of the main grid.            this.mainGrid.DataContext = this.sampleBindingSource;            // Assign the BindingSource to             // the data source of the list box.            this.listBox1.ItemsSource = this.sampleBindingSource;            // Because this is a master/details form, the DataGridView            // requires the foreign key relating the tables.            this.dataGridView1.DataSource = this.sampleBindingSource;            // Handle the currency management aspect of the data models.            // Attach an event handler to detect when the current item             // changes via the WPF ListBox. This event handler synchronizes            // the list collection with the BindingSource.                                    BindingListCollectionView cv = CollectionViewSource.GetDefaultView(                this.sampleBindingSource) as BindingListCollectionView;            cv.CurrentChanged += new EventHandler(WPF_CurrentChanged);        }        //</snippet13>        //<snippet14>        // This event handler updates the current item         // of the data binding.        void WPF_CurrentChanged(object sender, EventArgs e)        {            BindingListCollectionView cv = sender as BindingListCollectionView;            this.sampleBindingSource.Position = cv.CurrentPosition;        }        //</snippet14>

在创建 XAML 项目时,会自动地执行以下修改:

  • 在 XAML 项目中添加对 IBM 数据提供者的引用。
  • 在项目中添加一个强类型的数据集,其中包含选择的所有数据表(例如 Employee 表)。
  • 生成 XAML C# 代码并对数据集进行初始化。
  • 创建一个新的 Windows 表单 BindingSource 对象,把数据集分配给数据源属性。
  • 用数据集初始化 BindingSource 之后,代码装载每个表,让示例应用程序可以访问它的字段,例如通过调用数据集来填充 Employee 表。
  • 把 BindingSource 分配给主网格的数据上下文,主网格是主要的容器控件,它包含表单上的所有子控件。还把 BindingSource 分配给列表框和网格控件的数据源属性。把所有控件绑定到 BindingSource 对象之后,就可以在 XAML 代码中访问所有字段。
  • 代码生成器还为 XAML 项目的可见部分生成一个示例,其中定义了所有用户界面元素。
  • 在生成用户界面的过程中,给每个控件分配相关联的数据成员(例如,列表框与职员 ID 相关联,网格与 Employee 表中的所有字段相关联,每个文本框与 Employee 表的各个字段相关联)。

F5 运行生成的应用程序。图 7 显示 Employee XAML 应用程序,它是使用 IBM DB2 sample 数据库中的 Employee 表生成的。图 7 显示了三种数据绑定。可能需要修改水平对齐或移动文本框,让数据值以适当的方式显示。


图 7. 执行创建的 XAML 应用程序
执行创建的 XAML 应用程序

结束语

IBM Database Add-ins for Visual Studio 允许用户创建直接映射到 IBM 数据服务器中的关系对象的数据绑定 XAML 应用程序。这种简单的方式使用户不必深入了解 XAML 或 IBM 数据库。生成的代码演示了如何定制应用程序,只需编写很少的代码就能够开发出功能丰富的应用程序。WPF 是一种非常好的应用程序开发平台,提供出色的开发体验。

来顶一下
返回首页
返回首页
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
推荐资讯
相关文章
栏目更新
栏目热门