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,一经查实,立即删除!

相关文章

关于强化学习的一份介绍

在这篇文章中&#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…

【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位…

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

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

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…

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…

AndroidStudio-Activity的生命周期

一、Avtivity的启动和结束 从当前页面跳到新页面&#xff0c;跳转代码如下&#xff1a; startActivity(new Intent(源页面.this&#xff0c;目标页面.class))&#xff1b; 从当前页面回到上一个页面&#xff0c;相当于关闭当前页面&#xff0c;返回代码如下&#xff1a; finis…

ubuntu20.04 解决Pycharm没有写入权限,无法通过检查更新更新的问题

ubuntu20.04 解决Pycharm没有写入权限&#xff0c;无法通过检查更新更新的问题 您提供的截图显示了一个关于PyCharm更新的问题&#xff0c;其中提到了&#xff1a;“PyCharm 没有 /opt/pycharm-community-2024.1.2 的写入权限&#xff0c;请通过特权用户运行以更新。” 这表明…

云原生之运维监控实践-使用Telegraf、Prometheus与Grafana实现对InfluxDB服务的监测

背景 如果你要为应用程序构建规范或用户故事&#xff0c;那么务必先把应用程序每个组件的监控指标考虑进来&#xff0c;千万不要等到项目结束或部署之前再做这件事情。——《Prometheus监控实战》 去年写了一篇在Docker环境下部署若依微服务ruoyi-cloud项目的文章&#xff0c;当…

WinDefender Weaker

PPL Windows Vista / Server 2008引入 了受保护进程的概念&#xff0c;其目的不是保护您的数据或凭据。其最初目标是保护媒体内容并符合DRM &#xff08;数字版权管理&#xff09;要求。Microsoft开发了此机制&#xff0c;以便您的媒体播放器可以读取例如蓝光&#xff0c;同时…

计算机视觉 1-8章 (硕士)

文章目录 零、前言1.先行课程&#xff1a;python、深度学习、数字图像处理2.查文献3.环境安装 第一章&#xff1a;概论1.计算机视觉的概念2.机器学习 第二章&#xff1a;图像处理相关基础1.图像的概念2.图像处理3.滤波器4.卷积神经网络CNN5.图像的多层表示&#xff1a;图像金字…

实习冲刺练习 第二十三天

每日一题 回文链表. - 力扣&#xff08;LeetCode&#xff09; class Solution { public:bool isPalindrome(ListNode* head) {if(headnullptr) return false;vector<int> v;while(head!nullptr){//将链表的值存入数组中v.push_back(head->val);headhead->next;}in…

报错 No available slot found for the embedding model

报错内容 Server error: 503 - [address0.0.0.0:12781, pid304366] No available slot found for the embedding model. We recommend to launch the embedding model first, and then launch the LLM models. 目前GPU占用情况如下 解决办法: 关闭大模型, 先把 embedding mode…

RabbitMQ介绍和快速上手案例

文章目录 1.引入1.1同步和异步1.2消息队列的作用1.3rabbitMQ介绍 2.安装教程2.1更新软件包2.2安装erlang2.3查看这个erlang版本2.4安装rabbitMQ2.5安装管理页面2.6浏览器测试2.7添加管理员用户 3.rabbitMQ工作流程4.核心概念介绍4.1信道和连接4.2virtual host4.3quene队列 5.We…