WPF数据绑定入门

WPF(Windows Presentation Foundation)是一个用于Windows应用程序的用户界面框架,它提供了丰富的界面元素和强大的数据绑定功能。本文将指导如何使用WPF和SQL ServerCompact创建一个简单的数据绑定应用程序。

WPF相较于传统的Windows Forms,提供了更丰富的用户界面设计能力,包括2D和3D渲染、自适应文档、排版、矢量图形、运行时动画和预渲染媒体等。本文将通过一个简单的示例,展示如何在WPF中实现数据绑定到DataGrid控件。

先决条件

要开始本教程,需要以下软件:

创建新WPF项目

以下是使用Visual Studio2010创建新WPF项目的步骤:

  1. 点击“开始”菜单,选择“所有程序”中的“MicrosoftVisual Studio2010”,然后启动“Microsoft Visual Studio 2010”。
  2. 在Visual Studio中,点击“新建项目”。
  3. 在项目类型中选择“Visual C#”下的“Windows”选项卡,然后选择“WPF应用程序”。
  4. 为新WPF应用程序命名,并指定位置和解决方案名称。

开始设计和编程

使用WPF设计窗口或Web应用程序既简单又有趣。以下是使用WPF设计第一个应用程序的步骤:

WPF会生成类似于HTML的XAML标签。在设计过程中,使用了以下控件:

  • fName_lbl - “First Name”标签
  • fName_Txt - 文本框
  • lName_lbl - “Last Name”标签
  • lName_Txt - 文本框
  • DOB_lbl - “Date of Birth”标签
  • DOB_Txt - 日期选择器
  • City_lbl - “City”标签
  • City_Txt - 组合框
  • New_Btn - “New”按钮
  • Add_Btn - “Add”按钮
  • Del_Btn - “Delete”按钮
  • Update_Btn - “Update”按钮
  • Datagrid1 - 数据绑定到DataGrid1

数据绑定到DataGrid

WPF中,数据绑定到DataGrid非常简单。以下是一个示例,展示了如何使用ADO.NET进行数据绑定:

<DataGrid Name="dataGrid1" Width="481" Height="199" AutoGenerateColumns="False" ItemsSource="{Binding Path=MyDataBinding}"> <DataGrid.Columns> <DataGridTextColumn Header="First Name" Binding="{Binding Path=fName}" Width="120" IsReadOnly="True"/> <DataGridTextColumn Header="Last Name" Binding="{Binding Path=lName}" Width="110" IsReadOnly="True"/> <DataGridTextColumn Header="Date Of Birth" Binding="{Binding Path=DOB}" Width="150" IsReadOnly="True"/> <DataGridTextColumn Header="City" Binding="{Binding Path=City}" Width="90" IsReadOnly="True"/> </DataGrid.Columns> </DataGrid>

通过将数据分配给DataGrid的“ItemsSource”属性,并指定数据路径,可以连接到数据库以获取数据。这是WPF的一个附加功能。

App.config配置文件

App.config是一个配置文件,包含应用程序的设置和其他内容。以下是配置数据库连接字符串的示例:

<configuration> <connectionStrings> <add name="ConnectionString1" connectionString="Data Source=|DataDirectory|\DatabindusingWPF.sdf; Password=test@123; Persist Security Info=False;"/> </connectionStrings> </configuration>

这里使用了SQL ServerCompact 3.5 sp1作为数据源,因此需要提供数据库文件的确切路径。

BindGrid()方法

每当添加、删除或更新DataGrid时,都需要相应地更改它。因此,创建了一个名为“BindGrid()”的公共方法。以下是C#代码示例:

public void BindGrid() { string _ConnectionString = ConfigurationManager.ConnectionStrings["ConnectionString1"].ConnectionString; using (SqlCeConnection _Conn = new SqlCeConnection(_ConnectionString)) { _Conn.Open(); using (SqlCeDataAdapter _Adapter = new SqlCeDataAdapter("Select * from Details", _Conn)) { DataSet _Bind = new DataSet(); _Adapter.Fill(_Bind, "MyDataBinding"); dataGrid1.DataContext = _Bind; } } }

以上代码展示了如何获取SQL连接字符串,连接到数据库,并使用DataSet将数据绑定到DataGrid。

添加新记录

要向数据库添加新记录,可以使用简单的插入查询,并将新记录显示在DataGrid中。以下是C#代码示例:

private void Add_Btn_Click(object sender, RoutedEventArgs e) { try { using (SqlCeConnection _Conn = new SqlCeConnection(_ConnectionString)) { _Conn.Open(); string _Date = DOB_Txt.DisplayDate.ToShortDateString(); string _Insert = $@" insert into Details (fName, lName, DOB, City) Values('{fName_Txt.Text}','{lName_Txt.Text}','{_Date}','{City_Txt.Text}') "; using (SqlCeCommand _cmd = new SqlCeCommand(_Insert, _Conn)) { _cmd.ExecuteNonQuery(); } MessageBox.Show("One Record Inserted"); ClearTextBoxes(); BindGrid(); } } catch (Exception ex) { MessageBox.Show(ex.ToString()); } } private void ClearTextBoxes() { fName_Txt.Text = string.Empty; lName_Txt.Text = string.Empty; DOB_Txt.Text = string.Empty; City_Txt.Text = string.Empty; }

为了将日期存储到数据库中,使用了“ToShortDateString”方法,它去掉了时间部分。

删除记录

要删除数据库中的记录,可以使用简单的删除查询。以下是C#代码示例:

private void Del_Btn_Click(object sender, RoutedEventArgs e) { try { using (SqlCeConnection _conn = new SqlCeConnection(_ConnectionString)) { _conn.Open(); string _DelCmd = $@" Delete from Details Where fName='{fName_Txt.Text}' "; using (SqlCeCommand _CmdDelete = new SqlCeCommand(_DelCmd, _conn)) { _CmdDelete.ExecuteNonQuery(); } MessageBox.Show("One Record Deleted"); ClearTextBoxes(); BindGrid(); } } catch (Exception ex) { MessageBox.Show(ex.ToString()); } }

更新记录

要更新DataGrid中的现有数据,只需双击记录,然后编辑值,这些值将显示在相应的文本框中。以下是C#代码示例:

private void Update_Btn_Click(object sender, RoutedEventArgs e) { try { using (SqlCeConnection _Conn = new SqlCeConnection(_ConnectionString)) { _Conn.Open(); string _Date = DOB_Txt.DisplayDate.ToShortDateString(); string _UpdateCmd = $@" Update Details Set lName = '{lName_Txt.Text}', DOB = '{_Date}', City = '{City_Txt.Text}' Where fName = '{fName_Txt.Text}' "; using (SqlCeCommand _CmdUpdate = new SqlCeCommand(_UpdateCmd, _Conn)) { _CmdUpdate.ExecuteNonQuery(); } MessageBox.Show("One Record Updated"); ClearTextBoxes(); BindGrid(); } } catch (Exception ex) { MessageBox.Show(ex.ToString()); } }
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485