使用 SQL Server Compact 的 WPF 浏览器应用程序中的数据绑定






4.71/5 (5投票s)
使用 SQL Server Compact 的 WPF 浏览器应用程序中的数据绑定
背景
在完成了我的第一篇博客文章(差不多 6 个月前 ;-)) 之后,我计划为它创建一个浏览器应用程序。本文将帮助您使用 SQL Server Compact 3.5 SP1 的基本数据绑定技术创建 WPF 浏览器应用程序,所以,事不宜迟,让我们开始我们的第一个 WPF 浏览器应用程序。
先决条件
- Visual Studio 2008/2010
- SQL Server 2008
Using the Code
在您的计算机上安装了所有先决条件后,启动“Visual Studio 2010” -> 选择“新建项目”以创建新的 WPF 浏览器应用程序,如下图所示:
 
 
选择“Windows” -> 选择“WPF Browser Application”,然后为应用程序命名,点击“确定”即可创建新的 WPF 浏览器应用程序。
现在,我们已经创建了一个新应用程序,接下来的议程是创建一个 GUI(图形用户界面)。以下是我使用的控件:
| Label | Control | 控件名称 | 
| 名字 | 文本框 | FirstName_txt | 
| 姓氏 | 文本框 | LastName_txt | 
| 出生日期 | 日期选择器 | DOB_txt | 
| 城市 | ComboBox | City_txt | 
| 
 | DataGrid | Details_Grid | 
| 新建 | Button | New_btn | 
| Add | Button | Add_btn | 
| 删除 | Button | Del_btn | 
| 更新 | Button | Update_btn | 
我使用了 ADO.NET 来绑定 Datagrid 的数据,它非常简单,可以快速绑定数据。以下是 DataGrid 的 XAML 代码:
 <DataGrid AutoGenerateColumns="False" Height="181" 
	HorizontalAlignment="Left" Margin="12,188,0,0" Name="Details_Grid" 
	VerticalAlignment="Top" Width="518" ItemsSource="{Binding Path=MyDataBinding}" 
	CanUserResizeRows="False" Loaded="Details_Grid_Loaded" 
	SelectedCellsChanged="Details_Grid_SelectedCellsChanged">
            <DataGrid.Columns>
                <DataGridTextColumn Binding="{Binding Path=fName}" 
		Header="First Name" Width="120" IsReadOnly="True" />
                <DataGridTextColumn Binding="{Binding Path=lName}" 
		Header="Last Name" Width="120" IsReadOnly="True" />
                <DataGridTextColumn Binding="{Binding Path=DOB}" 
		Header="Date Of Birth" Width="150" IsReadOnly="True" />
                <DataGridTextColumn Binding="{Binding Path=City}" 
		Header="City" Width="120" IsReadOnly="True" />
            </DataGrid.Columns>
</DataGrid> 
在上面的代码中,我通过为“ItemsSource”属性指定绑定路径名“MyDataBinding”来绑定 Datagrid 的数据,它将引用我在“BindGrid()”方法中声明的 dataset 名称。为了以自定义的方式查看 datagrid 中的数据,我在这里使用了 DataGrid 列,以便我们可以按照自己的顺序显示数据,如下图所示:
 
 
对于第一列,我使用了“DataGridTextColumn”,并将数据库列名“fname”引用为“First Name”,以便值直接绑定到此列。
好了,我们可以开始编写功能代码了,先从“Add”数据到数据库开始。只需双击“Add”按钮,就会创建一个新的点击事件,然后输入下面的代码:
     private void Add_btn_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                SqlCeConnection Conn = new SqlCeConnection(Connection_String);
                // Open the Database Connection
                Conn.Open();
                string Date = DOB_txt.DisplayDate.ToShortDateString();
                // Command String
                string Insert_Cmd = @"insert into Details(fName,lName,DOB,City) Values
		('" + FirstName_txt.Text + "','" + LastName_txt.Text +"','" + 
		Date.ToString() + "','" + City_txt.Text + "')";
                // Initialize the Command Query and Connection
                SqlCeCommand cmd = new SqlCeCommand(Insert_Cmd, Conn);
                // Execute the Command
                cmd.ExecuteNonQuery();
                MessageBox.Show("One Record Inserted");
                FirstName_txt.Text = string.Empty;
                LastName_txt.Text = string.Empty;
                DOB_txt.Text = string.Empty;
                City_txt.Text = string.Empty;
                this.BindGrid();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }
为了获取简短日期,我使用了 DatePicker 控件的“ToShortDateString()”方法。这个控件有很多可用方法,您可以根据自己的需求使用。
在上面的代码中,我使用了“sqlCeConnection”来建立与 SQL Server Compact 数据库的连接。为此,您需要添加 SQL Server Compact 的引用,如下面的屏幕截图所示:
 
 
右键单击“References” -> 选择“Add Reference”。
 
 
浏览到“C:\Program Files\Microsoft SQL Server Compact Edition\v3.5\Desktop” -> 选择“System.Data.SqlServerCe.dll”并点击“确定”。现在您应该能在引用中看到“Sql Server Compact”,如下所示:
 
 
要使用此命名空间的方法,请像处理 SQL Server 一样在标题中调用它。
using System.Data.SqlServerCe;
我使用 App.Config 文件来存储数据库连接详细信息,并在代码中调用连接字符串名称来建立数据库连接。
App.Config 文件
<configuration>
  <connectionStrings>
    <add name="ConnectionString1" 
	connectionString="Data Source=<Location of the Database file Goes here>
	\DatabindusingWPF.sdf; Password=test@123; Persist Security Info=False;"/>
  </connectionStrings>
</configuration>
使用 App.Config 文件将所有应用程序配置存储在一个文件中或一个地方的好处是,它类似于 ASP.NET 应用程序中的 Web.Config。
要从 app.config 文件中获取连接字符串值,我们必须在代码中创建一个引用,所以我使用了“System.Configuration”命名空间中的“ConfigurationManager”,如下面的代码所示:
string Connection_String = ConfigurationManager.ConnectionStrings
				["ConnectionString1"].ConnectionString; 
要了解有关 System.Configuration 类的更多信息,请参阅 此链接。
为了将数据绑定到 Datagrid,我创建了一个名为“BindGrid”的方法,并在所有其他事件中调用该方法来刷新 Datagrid 数据。
public void BindGrid()
        {
            try
            {
                SqlCeConnection Conn = new SqlCeConnection(Connection_String);
                //Open the Database Connection
                Conn.Open();
                SqlCeDataAdapter Adapter = new SqlCeDataAdapter
					("Select * from Details", Conn);
                // Bind Data to DataSet
                DataSet Bind = new DataSet();
                Adapter.Fill(Bind, "MyDataBinding");
                // Bind Data to DataGrid
                Details_Grid.DataContext = Bind;
                // Close the Database Connection
                Conn.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }
因此,我们需要为其他功能(如 New、Update 和 Delete)编写代码(请参阅附加的项目)。
现在,我们的第一个 WPF 浏览器项目的设计和编码部分已完成,我们需要测试我们的项目,为此,请按“F5”,
 
 
糟糕,我遇到了上面的错误!!!(如果您没有看到此错误并且您的项目已执行……哇……您真幸运 ;-)。
我在网上搜索了这个错误,并参考了许多链接,但都没有奏效。在一个论坛上,我发现删除“app.manifest”并创建新的“app.manifest”会起作用。哇,它对我起作用了。:-)
我知道这不是解决此问题的正确方法,所以我仍在努力。如果有人遇到此问题的其他解决方案,请在此处评论并分享您的发现。如果我发现任何解决方案,我也会这样做 ;-) 好的,成交……
太棒了,现在它没有错误地启动了。
 
 
我发现浏览器标题是“Databinding_WPF_Browser.xbap”,我想更改它,所以我通过在 XAML 文件中的 Page 标签中添加“WindowTitle”属性为“DataBinding in WPF using SQL Server Compact”。
 
 
浏览器标题现在已经改变了 :-) 我已经通过在 datagrid 中添加、删除和更新数据来测试了这些功能。所以我们已经成功创建并测试了我们的项目。
编程愉快 :-)。


