DevExpress WinForms中文教程:Data Grid - 如何绑定到实体框架数据源?

在本教程中,您将学习如何将DevExpress WinForms的网格控件绑定到实体框架数据源、如何使用数据注释属性来更改网格显示和管理数据的方式,以及如何将单元格值更改发送回数据源。

P.S:DevExpress WinForms拥有180+组件和UI库,能为Windows Forms平台创建具有影响力的业务解决方案。DevExpress WinForms能完美构建流畅、美观且易于使用的应用程序,无论是Office风格的界面,还是分析处理大批量的业务数据,它都能轻松胜任!

获取DevExpress WinForms v24.1正式版下载(Q技术交流:749942875)

起点

从一个项目开始,它有一个Windows Form和一个空的GridControl,该解决方案还包括一个默认名为Model1的实体框架模型,您可以双击它来查看图表上的可视化表示。在本教程中,使用修改版本的AdventureWorks数据库,它只包含一个表,其中只有几个字段。

DevExpress WinForms中文教程图集

绑定到实体框架数据源

将实体框架模型绑定到网格控件的最简单方法是使用数据源配置向导,调用DevExpress WinForms网格控件的智能标记并单击数据源向导。

DevExpress WinForms中文教程图集

选择Entity Framework技术并选择现有的数据连接或创建一个新的数据连接,在本教程中使用到样例Microsoft AdventureWorksDW2008R2数据库的现有连接,单击Next继续。

DevExpress WinForms中文教程图集

在下一页,您将被要求选择所需的绑定模式。选择Binding using Binding Source组件选项,然后单击Next。

DevExpress WinForms中文教程图集

最后,选择要在网格控件中显示的表格。

DevExpress WinForms中文教程图集

绑定到实体框架数据的结果

网格控件现在绑定到EF数据,并且已经生成了所有必需的代码,您可以在.cs文件中看到自动生成的代码。现在运行应用程序来查看结果。

DevExpress WinForms中文教程图集

下面是一些关于grid如何显示其绑定数据的观察。

  • 简单的数字格式应用于Price字段,但使用Currency格式会更有意义。
  • Description字段包含很长的值,因此很难在网格单元格中编辑它们。
  • 网格足够智能,可以为绑定到日期-时间字段的列分配一个特殊的编辑器。
  • 列名只是从字段名派生而来。
  • 显然没有应用于网格的数据验证规则。
应用数据标注属性

所有这些默认操作都可以使用DevExpress WinForms GridControl设置进行更改,另一种方法是更改数据字段属性或数据注释属性。当您有多个控件绑定到同一数据源时,这可能会派上用场。这样您就不必设置相同的规则,看看这是怎么回事。

打开包含表格数据模型的DimProducts.cs文件,在这里您可以看到所有可用的数据字段,它们被声明为DimProduct类的属性。

C#

public partial class DimProduct {
public int ProductKey { get; set; }
public string EnglishProductName { get; set; }
public Nullable<decimal> DealerPrice { get; set; }
public string EnglishDescription { get; set; }
public Nullable<System.DateTime> StartDate { get; set; }
public Nullable<System.DateTime> EndDate { get; set; }
}

VB.NET

Partial Public Class DimProduct
Public Property ProductKey() As Integer
Public Property EnglishProductName() As String
Public Property DealerPrice() As Decimal?
Public Property EnglishDescription() As String
Public Property StartDate() As Date?
Public Property EndDate() As Date?
End Class

向这些属性添加数据属性,看看这会如何改变网格操作。

注意:应用程序应该引用System.ComponentModel.DataAnnotations库来完成此操作。

  • 对于EnglishProductName字段,添加Required属性,这将不允许最终用户为该列的单元格设置空值。

C#

[Required]
public string EnglishProductName { get; set; }

VB.NET

<Required>
Public Property EnglishProductName() As String

运行应用程序来确保不再允许空值。

DevExpress WinForms中文教程图集

对于DealerPrice字段,添加DataType属性,以指示应该将这些整数值视为货币数据。此外,应用Range属性来设置允许的最小值和最大值。

C#

[DataType(DataType.Currency), Range(200, 5000)]
public Nullable<decimal> DealerPrice { get; set; }

VB.NET

<DataType(DataType.Currency), Range(200, 5000)>
Public Property DealerPrice() As Decimal?

DevExpress WinForms中文教程图集

  • 对于EnglishDescription字段,使用DataType属性将数据类型从简单文本更改为多行文本,Display属性将指定列的Name和Description。

C#

[DataType(DataType.MultilineText), Display(Name = "Description", Description = "Detailed product description")]
public string EnglishDescription { get; set; }

VB.NET

<DataType(DataType.MultilineText), Display(Name := "Description", Description := "Detailed product description")>
Public Property EnglishDescription() As String

运行应用程序来查看用于列标头及其工具提示的更新标题,另外注意单元格现在使用MemoEdit,因为您将数据类型指定为多行文本。

DevExpress WinForms中文教程图集

  • 最后对于StartDate和EndDate列,应用不同的格式化和编辑规则。第一个日期将被视为一个简单的文本值,第二列的数据仍然是日期-时间对象,但格式将更改为显示完整的月份、姓名和年份。

C#

[DataType(DataType.Text)] public Nullable<System.DateTime> StartDate { get; set; } [DisplayFormat(DataFormatString = "MMMM/yyyy")] public Nullable<System.DateTime> EndDate { get; set; }

VB.NET

<DataType(DataType.Text)>
Public Property StartDate() As Date?
<DisplayFormat(DataFormatString := "MMMM/yyyy")>
Public Property EndDate() As Date?

启动应用程序,看到StartDate列中没有显示任何特殊的编辑器。EndDate列保留了编辑器,但格式发生了变化。

DevExpress WinForms中文教程图集

将数据发回数据源

要确保网格控件中的单元格值更改被发送回数据源,您需要添加几行代码。当网格引发ColumnView.RowUpdated事件时保存更改,您需要访问数据源上下文,因此必须更改变量的作用域,使其对Form类中的所有方法都可用。在处理程序中,需要做的就是调用SaveChanges方法。

C#

DXApplication.AdventureWorksDW2008R2Entities dbContext;private void gridView1_RowUpdated(object sender, DevExpress.XtraGrid.Views.Base.RowObjectEventArgs e) {
dbContext.SaveChanges();
}

VB.NET

Private dbContext As DXApplication.AdventureWorksDW2008R2EntitiesPrivate Sub gridView1_RowUpdated(ByVal sender As Object, ByVal e As DevExpress.XtraGrid.Views.Base.RowObjectEventArgs)
dbContext.SaveChanges()
End Sub

现在运行应用程序并更改Dealer Price列中的值,将焦点移动到另一行,来确保引发ColumnView.RowUpdated事件。然后关闭应用程序并再次运行它,您将看到该值已保存。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/61018.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PostgreSQL学习总结(13)—— PostgreSQL 15.8 如何成就数据库性能王者?

前言 在当今数据驱动的时代&#xff0c;数据库的性能无疑是企业和开发者最为关注的焦点之一。而 PostgreSQL 15.8 的横空出世&#xff0c;犹如一颗璀璨的明星&#xff0c;在数据库性能的苍穹中闪耀着耀眼的光芒&#xff0c;引得无数人为之侧目。今天&#xff0c;就让我们一同揭…

树形dp总结

这类题型在 dp 中很常见&#xff0c;于是做一个总结吧&#xff01;&#xff01;&#xff01; 最经典的题&#xff1a;没有上司的舞会 传送门&#xff1a;没有上司的舞会 - 洛谷 状态表示&#xff1a; dp[i][0] 为 以 i 为根的子树中&#xff0c;选择 i 节点的最大欢乐值 d…

关于强化学习的一份介绍

在这篇文章中&#xff0c;我将介绍与强化学习有关的一些东西&#xff0c;具体包括相关概念、k-摇臂机、强化学习的种类等。 一、基本概念 所谓强化学习就是去学习&#xff1a;做什么才能使得数值化的收益信号最大化。学习者不会被告知应该采取什么动作&#xff0c;而是必须通…

微服务day07

MQ高级 发送者可靠性&#xff0c;MQ的可靠性&#xff0c;消费者可靠性。 发送者可靠性 发送者重连 连接重试的配置文件&#xff1a; spring:rabbitmq:connection-timeout: 1s # 设置MQ的连接超时时间template:retry:enabled: true # 开启超时重试机制initial-interval: 10…

i春秋-EXEC(命令执行、nc传输文件、带外通道传输数据)

练习平台地址 竞赛中心 题目描述 题目内容 小猫旁边有一个no sign F12检查页面 没有提示 检查源代码 发现使用了vim编辑器 进而联想到vim编辑器的临时交换文件.xxx.swp 访问.index.php.swp&#xff0c;成功下载文件 使用vim -r 查看文件内容 vim -r index.php.swp <?p…

【C语言】前端未来

你对前端未来的技术趋势有何看法&#xff1f;例如WebAssembly、WebXR、PWA等。 对未来前端技术趋势的看法&#xff0c;我认为有几个关键方向正在快速发展&#xff1a; WebAssembly (WASM)&#xff1a;随着性能需求的增长&#xff0c;WebAssembly作为一种低级字节码运行环境&…

【Web前端】Promise的使用

Promise是异步编程的核心概念之一。代表一个可能尚未完成的操作&#xff0c;并提供了一种机制来处理该操作最终的成功或失败。具体来说&#xff0c;Promise是由异步函数返回的对象&#xff0c;能够指示该操作当前所处的状态。 当Promise被创建时&#xff0c;它会处于“待定”&a…

YOLO系列基础(六)YOLOv1原理详解,清晰明了!

系列文章地址 YOLO系列基础&#xff08;一&#xff09;卷积神经网络原理详解与基础层级结构说明-CSDN博客 YOLO系列基础&#xff08;二&#xff09;Bottleneck瓶颈层原理详解-CSDN博客 YOLO系列基础&#xff08;三&#xff09;从ResNet残差网络到C3层-CSDN博客 YOLO系列基础…

硬石电机学习2024116

F4 概况 共模抑制线圈作用是滤波 LD3.3是将5v转为芯片用的3.3V CH340用于板子和电脑通讯 光耦隔离保护主控 16M的外部flash 1M的芯片内部的flash 10kHZ高速的光耦隔离&#xff0c;1M的低俗光耦隔离 F4 stm32概况 stm8和51都是一次可以运算处理8位的 32表示一次处理32位…

[Qt] Qt删除文本文件中的某一行

需求 我们经常读一个文件或者直接往一个空白文件中写文本&#xff0c;那么该如何使用Qt在一个文本文件中删除某一行 代码 #include <QCoreApplication> #include <QIODevice> #include <QFile> #include <QTextStream> #include <QString> #i…

【OceanBase 诊断调优】—— ocp上针对OB租户CPU消耗计算逻辑

指标介绍 租户 CPU 使用量 * 100 / 租户 CPU 分配量。 指标参数说明 指标项指标名称单位租户 CPU 消耗ob_tenant_cpu_percent% 计算表达式 sum(rate(ob_sysstat{stat_id"140013",LABELS}[INTERVAL])) by (GBLABELS) / sum(ob_sysstat{stat_id"140005"…

Vue开发风格

风格指南 如果在工程中使用 Vue&#xff0c;为了回避错误、小纠结和反模式&#xff0c;该指南是份不错的参考。不过我们也不确信风格指南的所有内容对于所有的团队或工程都是理想的。所以根据过去的经验、周围的技术栈、个人价值观做出有意义的偏差是可取的。 对于其绝大部分…

基于Python爬虫大屏可视化的热门旅游景点数据分析系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

OpenCV、YOLO、VOC、COCO之间的关系和区别

OpenCV、YOLO、COCO 和 VOC 是计算机视觉和深度学习领域常见的几个名词&#xff0c;它们分别代表不同的工具、算法和数据集&#xff0c;之间有一些联系和区别。下面分别说明它们的定义、用途以及相互关系。 1. OpenCV&#xff08;Open Source Computer Vision Library&#xf…

RAG经验论文《FACTS About Building Retrieval Augmented Generation-based Chatbots》笔记

《FACTS About Building Retrieval Augmented Generation-based Chatbots》是2024年7月英伟达的团队发表的基于RAG的聊天机器人构建的文章。 这篇论文在待读列表很长时间了&#xff0c;一直没有读&#xff0c;看题目以为FACTS是总结的一些事实经验&#xff0c;阅读过才发现FAC…

解析传统及深度学习目标检测方法的原理与具体应用之道

深度学习目标检测算法 常用的深度学习的目标检测算法及其原理和具体应用方法&#xff1a; R-CNN&#xff08;Region-based Convolutional Neural Networks&#xff09;系列1&#xff1a; 原理&#xff1a; 候选区域生成&#xff1a;R-CNN 首先使用传统的方法&#xff08;如 Se…

lambda 与函数指针

C 的函数类型包括了以下几种&#xff1a; 函数指针&#xff1b;成员函数指针&#xff1b;上述两种函数类型的引用、c-v- 和 noexcept 修饰符的排列组合。 在 C11 后&#xff0c;语言标准引入了更灵活的 lambda 函数&#xff1b;因此在函数类型中又新增了 lambda 类型和一堆修…

boost之property

简介 property在boost.graph中有使用&#xff0c;用于表示点属性或者边属性 结构 #mermaid-svg-56YI0wFLPH0wixrJ {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-56YI0wFLPH0wixrJ .error-icon{fill:#552222;}#me…

Oracle 19c PDB克隆后出现Warning: PDB altered with errors受限模式处理

在进行一次19c PDB克隆过程中&#xff0c;发现克隆结束&#xff0c;在打开后出现了报错&#xff0c;PDB变成受限模式&#xff0c;以下是分析处理过程 09:25:48 SQL> alter pluggable database test1113 open instancesall; Warning: PDB altered with errors. Elapsed: 0…