第四步、WPF後臺邏輯代碼編寫數據庫
在後臺用Entity Framework 6.1的Code First方式獲取數據庫中的數據。同時,在「刷新」按鈕的方法中進行數據綁定。操做步驟以下:ide
1) 在「刷新」按鈕上使用鼠標右鍵,單擊,會彈出「屬性」窗口。以下圖。spa
2) 在「屬性」窗口中點擊右上角的閃電圖標按鈕,會出現事件窗口。在Click事件的文本框中進行雙擊,就會把按鈕的Click事件添加到後臺代碼中。以下圖。3d
3)具體代碼以下:code
public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); Database.SetInitializer<TestDBContext>(null); } private void btnRefresh_Click(object sender, RoutedEventArgs e) { GetData(); } TestDBContext db = new TestDBContext(); protected void GetData() { List<S_City> list = db.S_City.ToList<S_City>(); listView1.ItemsSource = list; } private void menuPrism_Click(object sender, RoutedEventArgs e) { WindowPrismDemo1 win = new WindowPrismDemo1(); win.Show(); } }
1) 對象實體類。代碼以下。對象
public class S_City { [Key] public long CityID{get;set;} public string CityName{get;set;} public string ZipCode{get;set;} public long ProvinceID{get;set;} public DateTime DateCreated{get;set;} public DateTime DateUpdated { get; set; } } public class TestDBContext : DbContext { public DbSet<S_City> S_City { get; set; } }
第五步、WPF前臺界面與後臺數據的Bindingblog
寫完了上面的代碼以後,按F5,程序運行了起來,點「刷新」按鈕卻沒有任何數據顯示。這是因爲後臺數據與前面界面沒有進行「綁定」,因此沒法顯示數據,接下來跟着我作。事件
1)給GridViewColumn指明當前列對應於數據源的哪一項,能夠經過DisplayMemberBinding屬性來實現。其中Path後面的值即是上一步中所寫的類S_City中指明屬性名稱。具體代碼以下。ip
<ListView Name="listView1" MinWidth="280" Grid.Row="1" > <ListView.View> <GridView x:Name="gridView1"> <GridViewColumn Header="CityID" DisplayMemberBinding="{Binding Path=CityID}"></GridViewColumn> <GridViewColumn Header="CityName" DisplayMemberBinding="{Binding Path=CityName}"></GridViewColumn> <GridViewColumn Header="ZipCode" DisplayMemberBinding="{Binding Path=ZipCode}"></GridViewColumn> <GridViewColumn Header="ProvinceID" DisplayMemberBinding="{Binding Path=ProvinceID}"></GridViewColumn> <GridViewColumn Header="DateCreated" DisplayMemberBinding="{Binding Path=DateCreated}"></GridViewColumn> <GridViewColumn Header="DateUpdated" DisplayMemberBinding="{Binding Path=DateUpdated}"></GridViewColumn> </GridView> </ListView.View> </ListView>
2)在Visual Studio 2013中按F5運行WPF程序,在程序運行起來以後,鼠標左鍵點擊「刷新」按鈕。你就能夠看到以下圖這樣的畫面了。ci
注意:若是運行時報如下錯誤信息:
異常:已引起: "The model backing the 'TestDBContext' context has changed since the database was created. Consider using Code First Migrations to update the database (http://go.microsoft.com/fwlink/?LinkId=238269)." (System.InvalidOperationException)
引起了一個 System.InvalidOperationException: "The model backing the 'TestDBContext' context has changed since the database was created. Consider using Code First Migrations to update the database (http://go.microsoft.com/fwlink/?LinkId=238269)."
解決方法:
具體請查看我前面代碼中構造方法中如下語句。請註釋掉就會報錯,加上去就不會有問題。
Database.SetInitializer<TestDBContext>(null);
3)當咱們使用鼠標左鍵點擊ListView中的記錄時,裏面的城市信息並無同步映射到下面的文本框中。這個功能應該如何實現呢?。
4)首先在WrapPanel元素中指明一個公共的上下文,能夠經過增長屬性 DataContext="{Binding ElementName=listView1,Path=SelectedItem}來實現。
5)其次,對於須要顯示相應信息的文本框,須要經過綁定TextBox元素中的Text屬性實現,實現代碼以下:
<WrapPanel Grid.Row="2" Orientation="Horizontal" DataContext="{Binding ElementName=listView1,Path=SelectedItem}"> <StackPanel Orientation="Horizontal" Margin="5,2,5,2"> <TextBlock Name="textBlock_CityID" Text="CityID:" /> <TextBox Name="textBox_CityID" MinWidth="100" Text="{Binding CityID}" /> </StackPanel> <StackPanel Orientation="Horizontal" Margin="5,2,5,2"> <TextBlock Name="textBlock_CityName" Text="CityName:" /> <TextBox Name="textBox_CityName" MinWidth="100" Text="{Binding CityName}" /> </StackPanel> <StackPanel Orientation="Horizontal" Margin="5,2,5,2"> <TextBlock Name="textBlock_ZipCode" Text="ZipCode:" /> <TextBox Name="textBox_ZipCode" MinWidth="100" Text="{Binding ZipCode}" /> </StackPanel> <StackPanel Orientation="Horizontal" Margin="5,2,5,2"> <TextBlock Name="textBlock_ProvinceID" Text="ProvinceID:" /> <TextBox Name="textBox_ProvinceID" MinWidth="100" Text="{Binding ProvinceID}" /> </StackPanel> <StackPanel Orientation="Horizontal" Margin="5,2,5,2"> <TextBlock Name="textBlock_DateCreated" Text="DateCreated:" /> <TextBox Name="textBox_DateCreated" MinWidth="100" Text="{Binding DateCreated}" /> </StackPanel> <StackPanel Orientation="Horizontal" Margin="5,2,5,2"> <TextBlock Name="textBlock_DateUpdated" Text="DateUpdated:" /> <TextBox Name="textBox_DateUpdated" MinWidth="100" Text="{Binding DateUpdated}" /> </StackPanel> </WrapPanel>
6) 在Visual Studio 2013中按F5運行WPF程序,在程序運行起來以後,鼠標左鍵點擊「刷新」按鈕。在出現數據以後,使用鼠標左鍵點擊ListView中的記錄,你會發現文本框與ListView實現了聯動。以下圖。
第六步、數據更新
1) 在原來只放一個按鈕的地方,須要要多放一個按鈕,若是隻是簡單的放一個按鈕,就會以下圖,所示,兩個按鈕重疊在一塊兒。
2) 咱們須要在XAML窗口中加個一個面板窗口。代碼以下。
<WrapPanel Grid.Row="3" Orientation="Horizontal" HorizontalAlignment="Right"> <Button HorizontalAlignment="Right" Name="btnRefresh" Height="22" VerticalAlignment="Top" Width="65" Click="btnRefresh_Click">刷新</Button> <Button HorizontalAlignment="Right" Name="btnUpdate" Height="22" VerticalAlignment="Top" Width="65" >更新</Button> </WrapPanel>
3) 給按鈕btnUpdate添加一個Click事件,在Click事件中實現更新代碼。代碼以下。
private void btnUpdate_Click(object sender, RoutedEventArgs e) { long id = long.Parse(textBox_CityID.Text); var city = db.S_City.Where(c => c.CityID == id).OrderBy(c => c.CityID).FirstOrDefault(); city.CityID = id; city.CityName = textBox_CityName.Text; city.DateCreated = DateTime.Parse(textBox_DateCreated.Text); city.DateUpdated = DateTime.Parse(textBox_DateUpdated.Text); city.ProvinceID = long.Parse(textBox_ProvinceID.Text); city.ZipCode = textBox_ZipCode.Text; db.SaveChanges(); }
4) 選中一條記錄,而後進行修改,更改以後,點擊「更新」按鈕。就能夠把數據保存到數據庫了。以下圖。
5) 咱們查詢一下數據庫,看一下數據是否已經更新到數據庫裏面了。以下圖。