wpf入门教程系列二十——listview示例

倾城风云 倾城风云     2022-09-20     651

关键词:

第四步、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入门教程系列二十一——datagrid示例

DataGrid示例的后台代码1) 通过EntityFramework6.1从数据库(本地数据库(local)/Test中的S_City表中读取城市信息数据,从S_Province表中读取省份信息,然后通过绑定的方式反数据显示到WPF的Window上的一个DataGrid上。具体代码如下。usingSys... 查看详情

wpf入门教程系列十九——listview示例

 经过前面的学习,今天我做一个比较综合的WPF程序示例,主要包括以下功能: 1) 查询功能。从数据库(本地数据库(local)/Test中的S_City表中读取城市信息数据,然后展示到WPF的Window上的一个ListView上。2) 数据联动功... 查看详情

wpf入门教程系列二——application介绍

一.Application介绍WPF和WinForm 很相似, WPF与WinForm一样有一个 Application对象来进行一些全局的行为和操作,并且每个 Domain (应用程序域)中仅且只有一个 Application 实例存在。和 WinForm 不同的是WPF&n... 查看详情

wpf入门教程系列一——基础

一、 前言         最近在学习WPF,学习WPF首先上的是微软的MSDN,然后再搜索了一下网络有关WPF的学习资料。为了温故而知新把学习过程记录下来,以备后查。这篇主要讲WPF的开发基础,介绍... 查看详情

wpf入门教程系列十五——wpf中的数据绑定

 使用WindowsPresentationFoundation(WPF)可以很方便的设计出强大的用户界面,同时WPF提供了数据绑定功能。WPF的数据绑定跟Winform与ASP.NET中的数据绑定功能类似,但也有所不同,在WPF中以通过后台代码绑定、前台XAML中进行绑定,或... 查看详情

hadoopmapreduce编程api入门系列之倒排索引(二十四)

     不多说,直接上代码。2016-12-1221:54:04,509INFO[org.apache.hadoop.metrics.jvm.JvmMetrics]-InitializingJVMMetricswithprocessName=JobTracker,sessionId=2016-12-1221:54:05,166WARN[org.apache.hado 查看详情

wpf入门教程系列十八——wpf中的数据绑定

六、排序    如果想以特定的方式对数据进行排序,可以绑定到CollectionViewSource,而不是直接绑定到ObjectDataProvider。CollectionViewSource则会成为数据源,并充当截取ObjectDataProvider中的数据的媒介,并提供排序、分组和... 查看详情

wpf入门教程系列四——dispatcher介绍

一、Dispatcher介绍    微软在WPF引入了Dispatcher,那么这个Dispatcher的主要作用是什么呢?    不管是WinForm应用程序还是WPF应用程序,实际上都是一个进程,一个进程可以包含多个线程,其中有一个是主... 查看详情

wpf入门教程系列十一——依赖属性

一、依赖属性基本介绍  本篇开始学习WPF的另一个重要内容依赖属性。    大家都知道WPF带来了很多新的特性,其中一个就是引入了一种新的属性机制——依赖属性。依赖属性出现的目的是用来实现WPF中的样式、... 查看详情

wpf入门教程系列十七——wpf中的数据绑定

四、XML数据绑定   这次我们来学习新的绑定知识,XML数据绑定。XmlDataProvider用来绑定XML数据,该XML数据可以是嵌入.Xmal文件的XmlDataProvider标记中,也可以是外部位置引用的文件中。    当然嵌入式XML内容... 查看详情

wpf入门教程系列五——window介绍

一、窗体类基本概念对于WPF应用程序,在Visual Studio和Expression Blend中,自定义的窗体均继承System.Windows.Window类。用户通过窗口与 Windows Presentation Foundation (WPF) 独立应用程序进行交互。 窗口的主要用途... 查看详情

ros从入门到精通系列(二十七)--rosparameterserver

1.官方教程链接:rospy/Overview/ParameterServer-ROSWiki2.推荐阅读roscpp&overview:roscpp/Overview/ParameterServer-ROSWikihttp://wiki.ros.org/roscpp/Overview/Parameter%20Serverroscpp/Overview-ROSWikihttp://wiki 查看详情

ros从入门到精通系列(二十七)--rosparameterserver

1.官方教程链接:rospy/Overview/ParameterServer-ROSWiki2.推荐阅读roscpp&overview:roscpp/Overview/ParameterServer-ROSWikihttp://wiki.ros.org/roscpp/Overview/Parameter%20Serverroscpp/Overview-ROSWikihttp://wiki 查看详情

ros从入门到精通系列(二十七)--rosparameterserver

1.官方教程链接:rospy/Overview/ParameterServer-ROSWiki2.推荐阅读roscpp&overview:roscpp/Overview/ParameterServer-ROSWikihttp://wiki.ros.org/roscpp/Overview/Parameter%20Serverroscpp/Overview-ROSWikihttp://wiki 查看详情

hadoopmapreduce编程api入门系列之fof(fundoffund)(二十三)

    不多说,直接上代码。                     代码packagezhouls.bigdata.myMapReduce.friend;importo 查看详情

wpf开始教程[译](代码片段)

...WPF后,是时候写点关于WPF基础方面的东西了。我发表了一系列针对具体问题的文章。现在是到了让大家明白为什么说WPF是一款在界面开发上带来革命的产品了。本文针对初级-中级程序员,所以我尽量给出一些基础的示例。WPF介... 查看详情

ros从入门到精通系列(二十七)--rosparameterserver

1.官方教程链接:rospy/Overview/ParameterServer-ROSWiki2.推荐阅读roscpp&overview:roscpp/Overview/ParameterServer-ROSWikihttp://wiki.ros.org/roscpp/Overview/Parameter%20Serverroscpp/Overview-ROSWikihttp://wiki.ros.org/roscpp/Overview< 查看详情

wpf入门教程系列十四——依赖属性

六、依赖属性回调、验证及强制值   我们通过下面的这幅图,简单介绍一下WPF属性系统对依赖属性操作的基本步骤:   借用一个常见的图例,介绍一下WPF属性系统对依赖属性操作的基本步骤: 第一步,确定... 查看详情