WPF(Windows Presentation Foundation)是一个用于Windows应用程序的用户界面框架,它提供了丰富的界面元素和强大的数据绑定功能。本文将指导如何使用WPF和SQL ServerCompact创建一个简单的数据绑定应用程序。
WPF相较于传统的Windows Forms,提供了更丰富的用户界面设计能力,包括2D和3D渲染、自适应文档、排版、矢量图形、运行时动画和预渲染媒体等。本文将通过一个简单的示例,展示如何在WPF中实现数据绑定到DataGrid控件。
要开始本教程,需要以下软件:
以下是使用Visual Studio2010创建新WPF项目的步骤:
使用WPF设计窗口或Web应用程序既简单又有趣。以下是使用WPF设计第一个应用程序的步骤:
WPF会生成类似于HTML的XAML标签。在设计过程中,使用了以下控件:
在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是一个配置文件,包含应用程序的设置和其他内容。以下是配置数据库连接字符串的示例:
<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作为数据源,因此需要提供数据库文件的确切路径。
每当添加、删除或更新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());
}
}