ADO.NET 4 快速上手(8)——數據綁定

八、    數據綁定


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();
}

注意:這種綁定,數據是隻讀的。

發佈了32 篇原創文章 · 獲贊 2 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章