使用 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
中添加、删除和更新数据来测试了这些功能。所以我们已经成功创建并测试了我们的项目。
编程愉快 :-)。