八、 數據綁定
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();
}
注意:這種綁定,數據是隻讀的。