65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.71/5 (5投票s)

2011年8月22日

CPOL

4分钟阅读

viewsIcon

56220

downloadIcon

2628

使用 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 浏览器应用程序,如下图所示:

1.jpg

选择“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 列,以便我们可以按照自己的顺序显示数据,如下图所示:

Exe1_-_Copy.JPG

对于第一列,我使用了“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 的引用,如下面的屏幕截图所示:

Add-Reference.jpg

右键单击“References” -> 选择“Add Reference”。

Add-Reference1.JPG

浏览到“C:\Program Files\Microsoft SQL Server Compact Edition\v3.5\Desktop” -> 选择“System.Data.SqlServerCe.dll”并点击“确定”。现在您应该能在引用中看到“Sql Server Compact”,如下所示:

After-Add-Reference.JPG

要使用此命名空间的方法,请像处理 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”,

WPFError_-_Copy.jpg

糟糕,我遇到了上面的错误!!!(如果您没有看到此错误并且您的项目已执行……哇……您真幸运 ;-)。

我在网上搜索了这个错误,并参考了许多链接,但都没有奏效。在一个论坛上,我发现删除“app.manifest”并创建新的“app.manifest”会起作用。哇,它对我起作用了。:-)

我知道这不是解决此问题的正确方法,所以我仍在努力。如果有人遇到此问题的其他解决方案,请在此处评论并分享您的发现。如果我发现任何解决方案,我也会这样做 ;-) 好的,成交……

太棒了,现在它没有错误地启动了。

Exe1.JPG

我发现浏览器标题是“Databinding_WPF_Browser.xbap”,我想更改它,所以我通过在 XAML 文件中的 Page 标签中添加“WindowTitle”属性为“DataBinding in WPF using SQL Server Compact”。

Exe2.JPG

浏览器标题现在已经改变了 :-) 我已经通过在 datagrid 中添加、删除和更新数据来测试了这些功能。所以我们已经成功创建并测试了我们的项目。

编程愉快 :-)。

© . All rights reserved.