WPF入門教程系列二十——ListView樣本(二)

來源:互聯網
上載者:User

標籤:構造方法   行資料   邏輯   out   link   ipc   cli   方法   btn   

第四步、WPF後台邏輯代碼編寫

在後台用Entity Framework 6.1的Code First方式擷取資料庫中的資料。同時,在[重新整理] 按鈕的方法中進行資料繫結。操作步驟如下:

1)  在[重新整理] 按鈕上使用滑鼠右鍵,單擊,會彈出“屬性”視窗。如。

 

2)  在“屬性”視窗中點擊右上方的閃電表徵圖按鈕,會出現事件視窗。在Click事件的文字框中進行雙擊,就會把按鈕的Click事件添加到後台代碼中。如。

 

3)具體代碼如下:

 

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前台介面與後台資料的Binding

寫完了上面的代碼之後,按F5,程式運行了起來,點[重新整理] 按鈕卻沒有任何資料顯示。這是由於後台資料與前面介面沒有進行“綁定”,所以無法顯示資料,接下來跟著我做。

1)給GridViewColumn指明當前列對應於資料來源的哪一項,可以通過DisplayMemberBinding屬性來實現。其中Path後面的值便是上一步中所寫的類S_City中指明屬性名稱。具體代碼如下。

 

<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程式,在程式運行起來之後,滑鼠左鍵點擊[重新整理] 按鈕。你就可以看到如這樣的畫面了。

 

 

注意:如果運行時報以下錯誤資訊:

 

異常:已引發: "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)        我們查詢一下資料庫,看一下資料是否已經更新到資料庫裡面了。如。

 

 

WPF入門教程系列二十——ListView樣本(二)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.