您好,
会员登录 快速注册
退出 ( 条未读消息)
关于本站 意见反馈 首页

公告:小宅博客网可以开发票了,需要发票的,去群里找群主哈!!
全部文章分类
  • 人工智能 >

  • 编程语言 >

  • WPF系列 >

  • ASP.NET系列 >

  • Linux >

  • 数据库 >

  • 嵌入式 >

  • WEB技术 >

  • PLC系列 >

  • 微服务与框架 >

  • 小宅DIY >

  • 学习资料 >

OpenCv基础 ANN车牌识别 yolov5车牌识别 指针式仪表识别 ROS系列 YOLO Halcon Detectron2 昇腾AI ChatGPT在线体验 英伟达JETSON ChatGLM ChatTTS FunASR 地平线 ByteTrack 魔搭社区 LangChain
C C# C++ Python Java Go
WPF
ASP.NET小功能 GPS定位系统-MVC GPS定位系统-VUE ASP.NET WebRTC
Linux Linux内核 Shell MakeFile
MySql SqlServer Oracle
STM8 STM32 51单片机
VUE入门 HTML JavaScript CSS layui镜像网站 ElementUi中文官网 element-plus 图标
三菱 欧姆龙 西门子 施耐德 松下 台达
IOTSharp IOTGateway ABP FRAMEWORK Docker
亚克力音响 编程仙途:智驭万法
面试题与技巧 Python入门技能树 微软C#教程
首页 编程之美 工具下载 全国就业 流量地图 文心一言
WPF
内容介绍 1、新建WPF工程 2、Application介绍 3、Dispatcher介绍 4、Window 介绍 5、主要布局属性介绍 6、Grid网格布局 7、UniformGrid布局 8、DockPanel与ViewBox布局 9、Border与ViewBox布局 10、依赖属性(一) 11、依赖属性(二) 12、依赖属性(三) 13、依赖属性(四) 14、WPF中的数据绑定(一) 15、WPF中的数据绑定(二) 16、WPF中的数据绑定(三) 17、WPF中的数据绑定(四) 18、ListView示例(一) 19、ListView示例(二) 20、DataGrid示例(一) 21、DataGrid示例(二) 22、DataGrid示例(三) 23、引用FontAwesome矢量图 24、ListBox日志效果 25、Polygon绘制多边形 26、Ellipse绘制实心圆 27、数据模板DataTemplate 基于WPF的exe远程升级程序
20、DataGrid示例(一)
22、DataGrid示例(三)
激萌の小宅 博客园 WPF

文章作者:激萌の小宅

促销:¥0

价格:¥0

配送方式: 购买后立即生效(如购买异常,请联系站长)
付款之后一定要等待自动跳转结束,否则购买可能会失败
  • 0 天

    有效期

  • 0

    总销量

  • 0

    累计评价

DataGrid示例(二) - (二十一)


DataGrid示例的后台代码

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


MainWindow.xaml.cs代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows;
using WpfApp.MySql;

namespace WpfApp
{
    /// <summary>
    /// MainWindow.xaml 的交互逻辑
    /// </summary>
    public partial class MainWindow : Window
    {
        public List<d_Province> ProvinceList { get; set; }

        MyDbContext MyDb = new MyDbContext();
        public MainWindow()
        {
            InitializeComponent();
            InitMySql();
        }

        /// <summary>
        /// 初始化数据库
        /// </summary>
        private void InitMySql()
        {
            MyDb.Database.EnsureCreated();

            // 新建的数据库没有数据,这里添加一些
            if (MyDb.S_City.Count() == 0)
            {
                MyDbContext db = new MyDbContext();
                for (int i = 0; i < 10; i++)
                {
                    d_City d = new d_City();
                    d.CityName = $"AAA{i}";
                    d.ZipCode = $"100{i}";
                    d.ProvinceID = i;
                    d.DateCreated = DateTime.Now;
                    d.DateUpdated = DateTime.Now.AddDays(i);
                    db.S_City.Add(d);
                    db.SaveChanges();

                    d_Province p = new d_Province();
                    p.CityName = $"AAA{i}";
                    p.ProvinceID = i;
                    p.ProvinceName = $"BBB{i}";
                    db.S_Province.Add(p);
                    db.SaveChanges();
                }
                db.Dispose();
            }
        }
        private void btnRefresh_Click(object sender, RoutedEventArgs e)
        {
            BindDrp();
            GetData();
        }
        protected void GetData()
        {
            List<d_City> list = MyDb.S_City.ToList<d_City>();
            gridCitys.ItemsSource = list;
        }
        protected void BindDrp()
        {
            ProvinceList = MyDb.S_Province.ToList();
            cboProvince.ItemsSource = ProvinceList;
        }
        private void btnUpdate_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                d_City city = (d_City)gridCitys.SelectedItem;
                city.DateUpdated = DateTime.Now;
                txtMsg.Text = city.ProvinceID + "//" + city.CityName;
                d_City modifyCity = MyDb.S_City.Find(city.CityID);
                modifyCity = city;
                MyDb.SaveChanges();
                txtMsg.Text += "保存成功!";
            }
            catch (Exception ex)
            {
                txtMsg.Text += ex.Message;
            }
        }
    }
}


d_Province.cs代码如下:

namespace WpfApp.MySql
{
    public class d_Province
    {
        public int id { get; set; }
        public long ProvinceID { get; set; }
        public string CityName { get; set; }
        public string ProvinceName { get; set; }
    }
}


       2)写完了上面的代码之后,按F5,程序运行了起来,点“刷新”。你会看到如下结果。DataGrid自动生成了一些列,而实际上我们是不需要这些自动生成列的。所以需要把AutoGenerateColumns设为False。再执行第2步。就会看到如下的结果。


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


DataGrid的ComboBox列的绑定方式

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

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

       1、静态资源。有关更多信息,请参见 StaticResource 标记扩展。

       2、x: 静态代码实体。有关更多信息,请参见 x:Static 标记扩展。

       3、ComboBoxItem 类型的内联集合。

  

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


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

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


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

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


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

protected void BindDrp()
{
    ProvinceList = MyDb.S_Province.ToList();
    cboProvince.ItemsSource = ProvinceList;
}


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


       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学习(DataGrid示例1).zip

20、DataGrid示例(一)
22、DataGrid示例(三)

友情链接: CSDN激萌の小宅 95知识库 自考题库 罗分明个人网络博客 精益编程leanboot

小宅博客  www.bilibili996.com All Rights Reserved. 备案号: 闽ICP备2024034575号

网站经营许可证  福建省福州市 Copyright©2021-2025 版权所有

小宅博客
首页 智能家居 地图定位
公告:小宅博客网可以开发票了,需要发票的,去群里找群主哈!!

文章作者:激萌の小宅

促销:¥0

价格:¥0

配送方式: 购买后立即生效(如购买异常,请联系站长)
付款之后一定要等待自动跳转结束,否则购买可能会失败
  • 0 天

    有效期

  • 0

    总销量

  • 0

    累计评价

DataGrid示例(二) - (二十一)


DataGrid示例的后台代码

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


MainWindow.xaml.cs代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows;
using WpfApp.MySql;

namespace WpfApp
{
    /// <summary>
    /// MainWindow.xaml 的交互逻辑
    /// </summary>
    public partial class MainWindow : Window
    {
        public List<d_Province> ProvinceList { get; set; }

        MyDbContext MyDb = new MyDbContext();
        public MainWindow()
        {
            InitializeComponent();
            InitMySql();
        }

        /// <summary>
        /// 初始化数据库
        /// </summary>
        private void InitMySql()
        {
            MyDb.Database.EnsureCreated();

            // 新建的数据库没有数据,这里添加一些
            if (MyDb.S_City.Count() == 0)
            {
                MyDbContext db = new MyDbContext();
                for (int i = 0; i < 10; i++)
                {
                    d_City d = new d_City();
                    d.CityName = $"AAA{i}";
                    d.ZipCode = $"100{i}";
                    d.ProvinceID = i;
                    d.DateCreated = DateTime.Now;
                    d.DateUpdated = DateTime.Now.AddDays(i);
                    db.S_City.Add(d);
                    db.SaveChanges();

                    d_Province p = new d_Province();
                    p.CityName = $"AAA{i}";
                    p.ProvinceID = i;
                    p.ProvinceName = $"BBB{i}";
                    db.S_Province.Add(p);
                    db.SaveChanges();
                }
                db.Dispose();
            }
        }
        private void btnRefresh_Click(object sender, RoutedEventArgs e)
        {
            BindDrp();
            GetData();
        }
        protected void GetData()
        {
            List<d_City> list = MyDb.S_City.ToList<d_City>();
            gridCitys.ItemsSource = list;
        }
        protected void BindDrp()
        {
            ProvinceList = MyDb.S_Province.ToList();
            cboProvince.ItemsSource = ProvinceList;
        }
        private void btnUpdate_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                d_City city = (d_City)gridCitys.SelectedItem;
                city.DateUpdated = DateTime.Now;
                txtMsg.Text = city.ProvinceID + "//" + city.CityName;
                d_City modifyCity = MyDb.S_City.Find(city.CityID);
                modifyCity = city;
                MyDb.SaveChanges();
                txtMsg.Text += "保存成功!";
            }
            catch (Exception ex)
            {
                txtMsg.Text += ex.Message;
            }
        }
    }
}


d_Province.cs代码如下:

namespace WpfApp.MySql
{
    public class d_Province
    {
        public int id { get; set; }
        public long ProvinceID { get; set; }
        public string CityName { get; set; }
        public string ProvinceName { get; set; }
    }
}


       2)写完了上面的代码之后,按F5,程序运行了起来,点“刷新”。你会看到如下结果。DataGrid自动生成了一些列,而实际上我们是不需要这些自动生成列的。所以需要把AutoGenerateColumns设为False。再执行第2步。就会看到如下的结果。


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


DataGrid的ComboBox列的绑定方式

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

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

       1、静态资源。有关更多信息,请参见 StaticResource 标记扩展。

       2、x: 静态代码实体。有关更多信息,请参见 x:Static 标记扩展。

       3、ComboBoxItem 类型的内联集合。

  

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


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

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


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

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


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

protected void BindDrp()
{
    ProvinceList = MyDb.S_Province.ToList();
    cboProvince.ItemsSource = ProvinceList;
}


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


       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学习(DataGrid示例1).zip