八、 数据绑定
1. Windows Form
A. 简单绑定
一个控件容纳一条记录。
B. 分析操作生成的内容
后台窗体生成的代码:
private void tb_UserBindingNavigatorSaveItem_Click(object sender, EventArgs e)
{
this.Validate();
this.tb_UserBindingSource.EndEdit();
this.tableAdapterManager.UpdateAll(this.userDataSet);
}
private void Form1_Load(object sender, EventArgs e)
{
// TODO: This line of code loads data into the 'userDataSet.tb_User' table. You can move, or remove it, as needed.
this.tb_UserTableAdapter.Fill(this.userDataSet.tb_User);
}
生成的控件,主要设置属性分析如下:
设置文本框的数据绑定:
this.usernameTextBox.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.tb_UserBindingSource, "Username", true));
C. 复杂绑定
一个控件容纳多条记录。
D. 分析操作生成的内容
private void tb_UserBindingNavigatorSaveItem_Click(object sender, EventArgs e)
{
this.Validate();
this.tb_UserBindingSource.EndEdit();
this.tableAdapterManager.UpdateAll(this.userDataSet);
}
private void Form2_Load(object sender, EventArgs e)
{
// TODO: This line of code loads data into the 'userDataSet.tb_User' table. You can move, or remove it, as needed.
this.tb_UserTableAdapter.Fill(this.userDataSet.tb_User);
}
其他设置与简单绑定类似。
2. WPF
A. 操作
一个控件容纳一条记录。
A. 分析操作生成的内容
前台XAML代码:
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525" xmlns:my="clr-namespace:WpfApplication1" Loaded="Window_Loaded">
<Window.Resources>
<my:UserDataSet x:Key="userDataSet" />
<CollectionViewSource x:Key="tb_UserViewSource" Source="{Binding Path=tb_User, Source={StaticResource userDataSet}}" />
</Window.Resources>
<Grid>
<Grid DataContext="{StaticResource tb_UserViewSource}" HorizontalAlignment="Left" Margin="72,56,0,0" Name="grid1" VerticalAlignment="Top">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Label Content="Username:" Grid.Column="0" Grid.Row="0" HorizontalAlignment="Left" Margin="3" VerticalAlignment="Center" />
<TextBox Grid.Column="1" Grid.Row="0" Height="23" HorizontalAlignment="Left" Margin="3" Name="usernameTextBox" Text="{Binding Path=Username, Mode=TwoWay, ValidatesOnExceptions=true, NotifyOnValidationError=true}" VerticalAlignment="Center" Width="120" />
<Label Content="password:" Grid.Column="0" Grid.Row="1" HorizontalAlignment="Left" Margin="3" VerticalAlignment="Center" />
<TextBox Grid.Column="1" Grid.Row="1" Height="23" HorizontalAlignment="Left" Margin="3" Name="passwordTextBox" Text="{Binding Path=password, Mode=TwoWay, ValidatesOnExceptions=true, NotifyOnValidationError=true}" VerticalAlignment="Center" Width="120" />
</Grid>
</Grid>
</Window>
说明:CollectionViewSource是CollectionView,包装数据源的包装器,可以使WPF应用程序方便浏览数据源。
后台代码:
private void Window_Loaded(object sender, RoutedEventArgs e)
{
WpfApplication1.UserDataSet userDataSet = ((WpfApplication1.UserDataSet)(this.FindResource("userDataSet")));
// Load data into the table tb_User. You can modify this code as needed.
WpfApplication1.UserDataSetTableAdapters.tb_UserTableAdapter userDataSettb_UserTableAdapter = new WpfApplication1.UserDataSetTableAdapters.tb_UserTableAdapter();
userDataSettb_UserTableAdapter.Fill(userDataSet.tb_User);
System.Windows.Data.CollectionViewSource tb_UserViewSource = ((System.Windows.Data.CollectionViewSource)(this.FindResource("tb_UserViewSource")));
tb_UserViewSource.View.MoveCurrentToFirst();
}
前台手动添加四个导航按键:
<Button Content="First" Grid.Column="0" Click="First_Click" />
<Button Content="Previous" Grid.Column="1" Click="Previous_Click" />
<Button Content="Next" Grid.Column="2" Click="Next_Click" />
<Button Content="Last" Grid.Column="3" Click="Last_Click" />
编写导航事件处理代码:
private void First_Click(object sender, RoutedEventArgs e)
{
CollectionViewSource source = (CollectionViewSource)this.FindResource("tb_UserViewSource");
source.View.MoveCurrentToFirst();
}
private void Previous_Click(object sender, RoutedEventArgs e)
{
CollectionViewSource source = (CollectionViewSource)this.FindResource("tb_UserViewSource");
source.View.MoveCurrentToPrevious();
}
private void Next_Click(object sender, RoutedEventArgs e)
{
CollectionViewSource source = (CollectionViewSource)this.FindResource("tb_UserViewSource");
source.View.MoveCurrentToNext();
}
private void Last_Click(object sender, RoutedEventArgs e)
{
CollectionViewSource source = (CollectionViewSource)this.FindResource("tb_UserViewSource");
source.View.MoveCurrentToLast();
}
注意:这种绑定,数据是只读的。