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

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

关键词:

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>

 

 

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

第四步、WPF后台逻辑代码编写在后台用EntityFramework6.1的CodeFirst方式获取数据库中的数据。同时,在“刷新”按钮的方法中进行数据绑定。操作步骤如下:1) 在“刷新”按钮上使用鼠标右键,单击,会弹出“属性”窗口。如下... 查看详情

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

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

hadoopmapreduce编程api入门系列之网页流量版本1(二十一)

   不多说,直接上代码。  对流量原始日志进行流量统计,将不同省份的用户统计结果输出到不同文件。                       代码packag 查看详情

springboot2系列教程(二十一)|自动配置原理

微信公众号:一个优秀的废人。如有问题,请后台留言,反正我也不会听。前言这个月过去两天了,这篇文章才跟大家见面,最近比较累,大家见谅下。下班后闲着无聊看了下SpringBoot中的自动配置,把我的理解跟大家说下。配... 查看详情

《c#零基础入门之百识百例》(二十一)数组遍历--删除数组零元素

...题分析3.3参考代码前言本文属于C#零基础入门之百识百例系列文章。此系列文章旨在为学习C#语言的童鞋提供一套系统的学习路径。此系列文章都会通过【知识点】【练习题】的形式呈现。有任何问题,你都可以通过评论,私信... 查看详情

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

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

linux系列教程(二十一)——linux的bash基本功能

  上篇博客我们介绍了什么是shell,以及编写shell脚本的两种执行方式。我们知道在敲命令的时候,有很多快捷键,比如tab键能补全命令,在比如为什么我们直接敲ll命令能显示目录的长格式,其实这是bash的基本功能。本篇博... 查看详情

wpf学习第二十一章特殊容器(代码片段)

原文:【WPF学习】第二十一章特殊容器  内容控件不仅包括基本控件,如标签、按钮以及工具提示;它们还包含特殊容器,这些容器可用于构造用户界面中比较大的部分区域。  首先介绍ScrollViewer控件,该控件直接继承自Conte... 查看详情

java多线程快速入门(二十一)

CountDownLatch(闭锁)计数器  有一个任务A,它要等待其他4个任务执行完毕之后才执行,此时就可以利用CountDownLatch来实现这种功能packagecom.cppdy;importjava.util.concurrent.CountDownLatch;classMyThread17extendsThread{privateCountDownLatchcountdownlatc 查看详情

通学智能合约系列(二十一)--结构体<下>(代码片段)

大家好,通学技术,学通技术,让我们一起继续来看看智能合约结构体memory和storage类型转换吧~6、结构体storage转storage详解hello,大家好,我们紧接着上节内容来看看,结构体关于storage和memory类型的转换。... 查看详情

wpf学习第二十一章特殊容器(代码片段)

  内容控件不仅包括基本控件,如标签、按钮以及工具提示;它们还包含特殊容器,这些容器可用于构造用户界面中比较大的部分区域。  首先介绍ScrollViewer控件,该控件直接继承自ContentControl类,提供了虚拟界面,允许用... 查看详情

《c#零基础入门之百识百例》(九十一)预处理器指令--代码示例

...表达式3.4代码示例前言本文属于C#零基础入门之百识百例系列文章。此系列文章旨在为学习C#语言的童鞋提供一套系统的学习路径。此系列文章都会通过【知识点】【练习题】的形式呈现。有任何问题,你都可以通过评论,私信... 查看详情

《c#零基础入门之百识百例》(九十一)预处理器指令--代码示例

...表达式3.4代码示例前言本文属于C#零基础入门之百识百例系列文章。此系列文章旨在为学习C#语言的童鞋提供一套系统的学习路径。此系列文章都会通过【知识点】【练习题】的形式呈现。有任何问题,你都可以通过评论,私信... 查看详情

第二十一节——springmvc拦截器入门(代码片段)

一、设置一个target路径,用于跳转到index页面@ControllerpublicclassTargetController@RequestMapping("/target")publicModelAndViewshow()ModelAndViewmodelAndView=newModelAndView();modelAndView. 查看详情

vue教程(二十一)子组件传参父组件(代码片段)

Vue教程(二十一)子组件传参父组件要点通过事件向父组件发送消息this.$emit()代码实现<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible" 查看详情

reactnative系列教程之十一插件的安装使用与更新(示例:react-native-tab-navigator)

本站文章均为 李华明Himi 原创,转载务必在明显处注明: 转载自【黑米GameDev街区】原文链接: http://www.himigame.com/react-native/2294.htmlwidth="150"height="210"frameborder="0"scrolling="no 查看详情

springboot入门二十一,全局异常处理

一共两个文件,一个处理全局异常,保存信息到日志,另外一个负责返回异常信息给接口,只要将其文件添加到项目中,无需再做其他配置即可1.MyExceptionHandler.java全局异常处理类优先执行此类,这里不好抓取404、403等错误信息getMaps()请... 查看详情

hulu机器学习问题与解答系列|二十一:分类排序回归模型的评估

本期问题的解答结合了具体的Hulu业务案例,可以说是很有趣又好懂了。快快学起来吧!  今天的内容是【分类、排序、回归模型的评估】 场景描述在模型评估过程中,分类问题、排序问题、回归问题往往需要使用不... 查看详情