news 2026/4/18 7:30:23

DevExpress WinForms中文教程:Data Grid - 数据绑定(一)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
DevExpress WinForms中文教程:Data Grid - 数据绑定(一)

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

DevExpress的数据感知控件与任意数据访问技术(如 ADO.NET、Entity Framework、XPO 等)兼容,并且能够显示来自任何实现 IList、IBindingList 或 ITypedList 接口数据源的数据。请注意,服务器模式和即时反馈模式会对数据绑定施加一定的限制。

Data Grid(或任何其他DevExpress数据感知控件)按原样显示源数据,如果您需要先显示经过筛选或排序的记录,或者将多个数据源合并为一个数据源,那么请在将数据感知控件绑定到该数据源之前,在数据源层面进行操作。

获取DevExpress WinForms v25.2正式版下载

DevExpress技术交流群12:1028386091 欢迎一起进群讨论

创建一个新的数据源

设置新数据源的最快方法是使用Data Source Configuration Wizard(数据源配置向导)。

重要提示:DevExpress Data Source Wizard(数据源向导)调用标准的Visual Studio数据源配置向导,该向导在.NET项目中不可用,您需要手动创建数据集、绑定源和表格适配器(或者您可以在.NET框架项目中生成它们并将其添加到.NET项目中)。

点击Data Grid的智能标签,或者点击网格底部左上角的图标(请参考下方的图片)。

该向导允许您将控件与以下支持的来源进行绑定:

  • ADO.NET数据
  • SQL 数据
  • Excel 工作簿 和 CSV 文件
  • JSON 数据
  • Entity Framework
  • Entity Framework Core
  • LINQ to SQL类
  • Windows 通信基础架构(WCF)服务
  • Open Data v4 服务
  • DevExpress ORM工具 (XPO)
  • 运行时创建的数据 (IList, IEnumerable等)
  • XML数据
  • 没有可用强类型数据集的自定义数据

UnboundSource 组件使您能够混合使用不同的数据源类型,或者向已绑定的数据网格中添加虚拟行。

对于基于代码的数据源,可以使用Data Annotation Attributes来标记数据类的属性,从而预先定制网格(例如,防止为特定数据字段生成列,或者更改其内部编辑器的类型)。

选择现有的数据源

如果您已经准备好数据源,请使用Data Grid智能标签,在“Choose Data Source”编辑器中选择该数据源。

在代码中,将一个有效的数据源赋值给GridControl.DataSource属性。

C#

using System.Data.OleDb; // ... // Create a connection object. OleDbConnection connection = new OleDbConnection( "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\\DBs\\NWIND.MDB"); // Create a data adapter. OleDbDataAdapter adapter = new OleDbDataAdapter("SELECT * FROM Products", connection); // Create and fill a dataset. DataSet sourceDataSet = new DataSet(); adapter.Fill(sourceDataSet); // Specify the data source for the grid control. gridControl1.DataSource = sourceDataSet.Tables[0];

VB.NET

Imports System.Data.OleDb ' ... ' Create a connection object. Dim Connection As New OleDbConnection( _ "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\\DBs\\NWIND.MDB") ' Create a data adapter. Dim Adapter As New OleDbDataAdapter("SELECT * FROM Products", Connection) ' Create and fill a dataset. Dim SourceDataSet As New DataSet() Adapter.Fill(SourceDataSet) ' Specify the data source for the grid control. GridControl1.DataSource = SourceDataSet.Tables(0)
绑定到BindingList源

下面的示例演示如何将网格控件绑定到具有记录对象的BindingList源,Record 类实现了 INotifyPropertyChanged 接口,以便向网格控件通知某个属性值已发生更改。

注意:WinForms网格控件只能绑定到public属性。

C#

using System; using System.Windows.Forms; using System.ComponentModel; using DevExpress.XtraEditors; using System.Runtime.CompilerServices; using System.ComponentModel.DataAnnotations; namespace DXApplication1 { public partial class Form1 : XtraForm { BindingList<Record> records; public Form1() { InitializeComponent(); records = new BindingList<Record>() { new Record(){ CompanyName = "Hanari Carnes", Price = 19.99 }, new Record(){ CompanyName = "Romero y tomillo", Price = 28.99 }, new Record(){ CompanyName = "Reggiani Caseifici", Price = 14.99 }, new Record(){ CompanyName = "Maison Dewey", Price = 32.99 } }; gridControl1.DataSource = records; textEdit1.DataBindings.Add(new Binding("EditValue", records, "CompanyName")); textEdit1.Properties.ValidateOnEnterKey = true; } } public class Record : INotifyPropertyChanged { private Guid idValue = Guid.NewGuid(); [Display(Order = -1)] public Guid ID { get { return this.idValue; } } string text; [DisplayName("Company")] public string CompanyName { get { return text; } set { if (text != value) { if (string.IsNullOrEmpty(value)) throw new Exception(); text = value; OnPropertyChanged(); } } } double? val; [DataType(DataType.Currency)] public double? Price { get { return val; } set { if (val != value) { val = value; OnPropertyChanged(); } } } public event PropertyChangedEventHandler PropertyChanged; protected void OnPropertyChanged([CallerMemberName] string propertyName = "") { if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); } } }

VB.NET

Imports System Imports System.Windows.Forms Imports System.ComponentModel Imports DevExpress.XtraEditors Imports System.Runtime.CompilerServices Imports System.ComponentModel.DataAnnotations Namespace DXApplication1 Partial Public Class Form1 Inherits XtraForm Private records As BindingList(Of Record) Public Sub New() InitializeComponent() records = New BindingList(Of Record)() From { New Record() With { .CompanyName = "Hanari Carnes", .Price = 19.99 }, New Record() With { .CompanyName = "Romero y tomillo", .Price = 28.99 }, New Record() With { .CompanyName = "Reggiani Caseifici", .Price = 14.99 }, New Record() With { .CompanyName = "Maison Dewey", .Price = 32.99 } } gridControl1.DataSource = records textEdit1.DataBindings.Add(New Binding("EditValue", records, "CompanyName")) textEdit1.Properties.ValidateOnEnterKey = True End Sub End Class Public Class Record Implements INotifyPropertyChanged Private idValue As Guid = Guid.NewGuid() <Display(Order := -1)> Public ReadOnly Property ID() As Guid Get Return Me.idValue End Get End Property Private text As String <DisplayName("Company")> Public Property CompanyName() As String Get Return text End Get Set(ByVal value As String) If text <> value Then If String.IsNullOrEmpty(value) Then Throw New Exception() End If text = value OnPropertyChanged() End If End Set End Property Private val? As Double <DataType(DataType.Currency)> Public Property Price() As Double? Get Return val End Get Set(ByVal value? As Double) If Not val.Equals(value) Then val = value OnPropertyChanged() End If End Set End Property Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged Protected Sub OnPropertyChanged(Optional <CallerMemberName> ByVal propertyName As String = "") RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(propertyName)) End Sub End Class End Namespace

未完待续,更多内容下期见......

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 3:33:58

【国家级学会专委会主办】2026年智能检测与运动控制技术国际会议(IDMCT 2026)

2026年国际智能检测与运动控制技术会议将于2026年4月8日至10日在历史文化名城南京隆重召开。本次会议由南京工业大学主办&#xff0c;旨在搭建一个集学术研究、技术交流与产业合作于一体的国际化平台&#xff0c;促进智能检测与运动控制领域的创新发展与应用推广。会议诚邀来自…

作者头像 李华
网站建设 2026/4/17 17:37:43

SpringBoot + ResponseBodyEmitter 实时异步流式推送

目前市面上异步推送大多用的是websocket或者http轮训&#xff0c;今天咱们换一种更为简便的方式来实现流式输出&#xff0c;那就是 ResponseBodyEmitter。 其实&#xff0c;ResponseBodyEmitter 并非新技术&#xff0c;早在 Spring Framework 4.2 版本就已被引入。直到最近&am…

作者头像 李华
网站建设 2026/4/18 3:49:54

基于Spring Boot的网络安全意识教育平台的设计与实现

目录 摘要内容关键技术创新点 开发技术路线结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01; 摘要内容 基于Spring Boot的网络安全意识教育平台的设计与实现旨在通过现代化技术手段提升用户的网络安全意识&#xff0c;帮助用户识别和防…

作者头像 李华
网站建设 2026/4/13 9:17:43

python老年人膳食营养服务网站 养生食谱推荐系统

目录 老年人膳食营养服务网站摘要养生食谱推荐系统摘要技术实现要点社会价值体现 开发技术路线结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01; 老年人膳食营养服务网站摘要 该网站旨在为老年人提供科学、个性化的膳食营养服务&#…

作者头像 李华
网站建设 2026/4/18 6:58:41

完整演示 Git Flow 所有分支的创建与流转过程的 实操命令示例

✅ 假设项目刚初始化&#xff0c;只有 main 分支 ✅ 所有操作基于命令行 ✅ 模拟一个完整周期&#xff1a;开发 → 发布 → 热修复&#x1f680; 第 0 步&#xff1a;初始化项目&#xff08;仅有 main&#xff09; # 创建项目目录 mkdir my-project && cd my-project# …

作者头像 李华