WPF入门教程系列二十一——DataGrid示例(二)

DataGrid示例的后台代码

1)  通过Entity Framework 6.1 从数据库(本地数据库(local)/Test中的S_City表中读取城市信息数据,从S_ Province表中读取省份信息,然后通过绑定的方式反数据显示到WPF的Window上的一个DataGrid上。具体代码如下。

using System;

using System.Collections.Generic;

using System.Collections.ObjectModel;

using System.Data.Entity;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Windows;

using System.Windows.Controls;

using System.Windows.Data;

using System.Windows.Documents;

using System.Windows.Input;

using System.Windows.Media;

using System.Windows.Media.Imaging;

using System.Windows.Shapes;

using WpfApp1.Models;

namespace WpfApp1

{

    /// <summary>

    /// WindowGrid.xaml 的交互逻辑

    /// </summary>

    public partial class WindowGrid : Window

    {

        public WindowGrid()

        {

            InitializeComponent();

            Database.SetInitializer<TestDBContext>(null);

        }

        private void btnRefresh_Click(object sender, RoutedEventArgs e)

        {

            BindDrp();

            GetData();         

        }

        TestDBContext db = new TestDBContext();

        protected void GetData()

        {          

            List<S_City> list = db.S_City.ToList<S_City>();

            gridCitys.ItemsSource = list;           

        }

        protected void BindDrp()

        {

            List<S_Province> list = db.S_Province.ToList<S_Province>();

            cboProvince.ItemsSource = list;

            ProvinceList = list;

        }

        public List<S_Province> ProvinceList

        { get; set; }

        private void btnUpdate_Click(object sender, RoutedEventArgs e)

        {

            try

            {

                S_City city = (S_City)gridCitys.SelectedItem;

                city.DateUpdated = DateTime.Now;

                txtMsg.Text = city.ProvinceID + "//" + city.CityName;

                S_City modifyCity = db.S_City.Find(city.CityID);

                modifyCity = city;

                db.SaveChanges();

                txtMsg.Text += "保存成功!";

            }

            catch (Exception ex)

            {

                txtMsg.Text += ex.Message;               

            }        

        }

    }

}

2)  写完了上面的代码之后,按F5,程序运行了起来,点“刷新”。你会看到如下结果。如下图的结果。

3)  DataGrid自动生成了一些列,而实际上我们是不需要这些自动生成列的。所以需要把AutoGenerateColumns设为False。再执行第2步。就会看到如下的结果。

4)  虽然实现了下拉框的内容显示,但是却存在一个问题,继不显示应该显示的内容。最后查询网络之后才知道,应许做如下修改。

DataGrid的ComboBox列的绑定方式

  DataGridComboBoxColumn对数据源有下面的要求:

使用下列选项之一,若要填充下拉列表,首先设置 ComboBox 的 ItemsSource 属性:

  • 1、静态资源。有关更多信息,请参见 StaticResource 标记扩展。
  • 2、x: 静态代码实体。有关更多信息,请参见 x:Static 标记扩展。
  • 3、ComboBoxItem 类型的内联集合。

  

1)  在使用DataGrid的时候,有时候需要使某些列为ComboBox,这时自然想到使用DataGridComboBoxColumn,但是如果使用的是ItemsSource数据绑定后台的对象,就会发现,这根本就不能用。

2)  默认刷新按钮之后,下拉框中没有数据。我仔细看了一下代码,前台代码中并没有进行数据绑定,而且后台代码中也没写绑定的语句。前台代码如下。如果如下图。

<DataGridComboBoxColumn ClipboardContentBinding="{x:Null}" Header="ProvinceID" SelectedValueBinding="{x:Null}" SelectedItemBinding="{x:Null}" TextBinding="{x:Null}"/>

3)  我对程序进行了一些修改,前台代码不做修改,还是如下。

<DataGridComboBoxColumn x:Name="cboProvince" ClipboardContentBinding="{x:Null}" Header="ProvinceID" SelectedValueBinding="{x:Null}" SelectedItemBinding="{x:Null}" TextBinding="{x:Null}"/>

后台代码如下,进行了下拉框的绑定。

 protected void BindDrp()

        {

            List<S_Province> list = db.S_Province.ToList<S_Province>();

            cboProvince.ItemsSource = list;

        }

结果如下图。绑定是成功了,但是不显示我需要显示的值。

4)  对前台代码进行了如下修改。对DataGridComboBoxColumn进行了绑定。然后F5,运行发现,下拉框的显示是正常了,但是不论我怎么改,DataGrid中的“ProvinceID”默认只是显示空白,什么也不显示,如下图。前台代码如下。

<DataGridComboBoxColumn x:Name="cboProvince" ClipboardContentBinding="{x:Null}" Header="ProvinceID" SelectedValuePath="ProvinceID" DisplayMemberPath="ProvinceName" SelectedItemBinding="{x:Null}" TextBinding="{Binding ProvinceName}"/>

5)      但是当我加载数据到DataGrid中时,ProvinceID列默认还是为空,并没有显示我想显示的省份名称这样的数据。经过一番的查找与学习,最终把前台代码修改成如下。这样修改之后在DataGrid默认绑定数据之后,ProvinceID列达到了我想要的结果。如下图。

<DataGridComboBoxColumn x:Name="cboProvince" ClipboardContentBinding="{x:Null}" Header="ProvinceID" SelectedValuePath="ProvinceID" SelectedValueBinding="{Binding Path=ProvinceID,UpdateSourceTrigger=PropertyChanged}"  DisplayMemberPath="ProvinceName" SelectedItemBinding="{x:Null}" >

                </DataGridComboBoxColumn>

时间: 2024-10-25 08:06:24

WPF入门教程系列二十一——DataGrid示例(二)的相关文章

WPF入门教程系列十九——ListView示例(一)

经过前面的学习,今天我做一个比较综合的WPF程序示例,主要包括以下功能: 1) 查询功能.从数据库(本地数据库(local)/Test中的S_City表中读取城市信息数据,然后展示到WPF的Window上的一个ListView上. 2) 数据联动功能.当鼠标左键选中ListView中的某一条记录时,在ListView框下面文本框中显示详细信息. 3) 修改功能.修改TextBox中的内容后,点击“更新”按钮,把修改后的数据保存到数据库中,同时与Listview联动. 第一步.建立一个WPF项目

WPF入门教程系列(二) 深入剖析WPF Binding的使用方法

WPF入门教程系列(二) 深入剖析WPF Binding的使用方法 同一个对象(特指System.Windows.DependencyObject的子类)的同一种属性(特指DependencyProperty)只能拥有一个binding. 这一点可以通过设置binding对象的方法名得知: public static BindingExpressionBase SetBinding( DependencyObject target, DependencyProperty dp, BindingB

WPF入门教程系列二——Application介绍

原文:WPF入门教程系列二--Application介绍 一.Application介绍 WPF和WinForm 很相似, WPF与WinForm一样有一个 Application对象来进行一些全局的行为和操作,并且每个 Domain (应用程序域)中仅且只有一个 Application 实例存在.和 WinForm 不同的是WPF Application默认由两部分组成 : App.xaml 和 App.xaml.cs,这有点类似于 Asp.Net WebForm,将定义和行为代码相分离. 微

SeaJS入门教程系列之使用SeaJS(二)

SeaJS入门教程系列之使用SeaJS(二) 作者: 字体:[增加 减小] 类型:转载 时间:2014-03-03我要评论 这篇文章主要介绍了SeaJS入门教程系列之使用SeaJS,着重介绍了SeaJS的使用方法.关键方法的使用等,需要的朋友可以参考下 下载及安装 要在项目中使用SeaJS,你所有需要做的准备工作就是下载sea.js然后放到你项目的某个位置.SeaJS项目目前托管在GitHub上,主页为 https://github.com/seajs/seajs/ .可以到其git库的buil

[转载]WPF入门教程系列一——基础

一. 前言   最近在学习WPF,学习WPF首先上的是微软的MSDN,然后再搜索了一下网络有关WPF的学习资料.为了温故而知新把学习过程记录下来,以备后查.这篇主要讲WPF的开发基础,介绍了如何使用Visual Studio 2013创建一个WPF应用程序. 首先说一下学习WPF的基础知识: 1) 要会一门.NET所支持的编程语言.例如C#. 2) 会一点“标准通用标记语言”:WPF窗体程序使用的XAML语言,也属于“标准通用标记语言”的一个分支.如果以前接触过XML.HTML.XHTML.AS

WPF入门教程系列(一) 创建你的第一个WPF项目

WPF入门教程系列(一) 创建你的第一个WPF项目 WPF基础知识 快速学习绝不是从零学起的,良好的基础是快速入手的关键,下面先为大家摞列以下自己总结的学习WPF的几点基础知识: 1) C#基础语法知识(或者其他.NET支持的语言):这个是当然的了,虽然WPF是XAML配置的,但是总还是要写代码的,相信各位读者应该也都有这个基础了. 2) HTML语言:虽然WPF是窗体程序但是由于使用的XAML语言,如果以前接触过HTML.XHTML.ASP.NET之路的东西的话会,接受这些标签会很有帮助的,如

WPF入门教程系列二十一——DataGrid示例(一)

前面我们学习了ListView控件的使用示例,今天我们来学习DataGrid的有关知识.提到DataGrid 不管是Asp.Net中的网页开发还是WinForm应用程序开发都会频繁使用.通过它我们可以灵活的在行与列间显示各种数据.本篇将学习WPF中的DataGrid 相关功能. 首先,先介绍一下DataGrid中有哪些列的类型. DataGrid列的类型 默认情况下,当我们为DataGrid 控件设置ItemSource 属性后,DataGrid 会根据数据类型自动生成相应的列,下表列出Data

WPF入门教程系列二十——ListView示例(二)

第四步.WPF后台逻辑代码编写 在后台用Entity Framework 6.1的Code First方式获取数据库中的数据.同时,在"刷新"按钮的方法中进行数据绑定.操作步骤如下: 1)  在"刷新"按钮上使用鼠标右键,单击,会弹出"属性"窗口.如下图. 2)  在"属性"窗口中点击右上角的闪电图标按钮,会出现事件窗口.在Click事件的文本框中进行双击,就会把按钮的Click事件添加到后台代码中.如下图. 3)具体代码如下

WPF入门教程系列十一——依赖属性(一)

一.依赖属性基本介绍 本篇开始学习WPF的另一个重要内容依赖属性. 大家都知道WPF带来了很多新的特性,其中一个就是引入了一种新的属性机制--依赖属性.依赖属性出现的目的是用来实现WPF中的样式.自动绑定及实现动画等特性.依赖属性的出现是WPF这种特殊的呈现原理派生出来的,与.NET普通属性不同的是,依赖属性的值是依靠多个提供程序来判断的,并且其具有内建的传递变更通知的能力. 依赖属性基本应用在了WPF的所有需要设置属性的元素.依赖属性根据多个提供对象来决定它的值 (可以是动画.父类元素.绑定.