界面控件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数据感知控件)按原样显示源数据,如果您需要先显示经过筛选或排序的记录,或者将多个数据源合并为一个数据源,那么请在将数据感知控件绑定到该数据源之前,在数据源层面进行操作。

在上文中(点击这里回顾>>),我们介绍了如何创建一个新的数据源、选择现有的数据源、绑定到BindingList源等,本文将继续介绍如何切换另一个数据源等,欢迎持续关注我们~

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

切换到另一个数据源

一旦您首次选择了数据源,Data Grid会自动生成所有必需的列。如果之后您选择了其他数据源,之前创建的列仍会保留,这些列需要手动进行更新。要进行更新,请启动Data Grid Designer(数据网格设计器),切换到 "Columns"选项卡,然后点击*"Retrieve Fields"*按钮 。

如果您需要在代码中更改数据源,请将GridControl.DataSource属性重置为 null(在 Visual Basic 中为 Nothing),然后为该属性赋值一个新的数据源对象,建议将此代码包含在BeginUpdate()EndUpdate()方法调用之中。

C#

cs 复制代码
gridControl1.BeginUpdate();
try {
gridView1.Columns.Clear();
gridControl1.DataSource = null;
gridControl1.DataSource = < newDataSource >;
}
finally {
gridControl1.EndUpdate();
}

VB.NET

vbnet 复制代码
gridControl1.BeginUpdate()
Try
gridView1.Columns.Clear()
gridControl1.DataSource = Nothing
gridControl1.DataSource = (Of newDataSource )
Finally
gridControl1.EndUpdate()
End Try
将更改发布到源

对于大多数数据源类型,数据网格允许用户在运行时编辑数据,但这些更改不会自动保存到底层数据源中。请参考以下主题以了解如何将更改提交到数据源:Post Data to an Underlying Data Source

清除网格

GridControl.DataSource属性设置为 null(在 VB.NET 中为 Nothing),然后调用视图的 Columns.Clear()方法。

C#

cs 复制代码
gridControl1.DataSource = null;
gridView1.Columns.Clear();

VB.NET

vbnet 复制代码
gridControl1.DataSource = Nothing
gridView1.Columns.Clear()

如果您需要暂时清除数据网格中的数据并随后再恢复其数据,可以将该控件切换至一个空视图模式。

C#

cs 复制代码
using DevExpress.XtraGrid.Views.Grid;

object ds; // Data source

// Clear
ds = gridControl1.DataSource;
gridControl1.DataSource = null;
GridView view = new GridView(gridControl1);
view.OptionsView.ShowGroupPanel = false;
view.OptionsView.ShowColumnHeaders = false;
gridControl1.MainView = view;

// Restore
gridControl1.MainView = gridView1;
gridControl1.DataSource = ds;

VB.NET

vbnet 复制代码
Imports DevExpress.XtraGrid.Views.Grid

Private ds As Object ' Data source

' Clear
ds = gridControl1.DataSource
gridControl1.DataSource = Nothing
Dim view As New GridView(gridControl1)
view.OptionsView.ShowGroupPanel = False
view.OptionsView.ShowColumnHeaders = False
gridControl1.MainView = view

' Restore
gridControl1.MainView = gridView1
gridControl1.DataSource = ds
支持Fluent API

传统的自定义网格列或将它们与数据绑定的方法是假定您通过字符串字段名来访问列,如果无法在运行时填充网格列,或者您需要自定义逻辑来获取列设置,那么可以使用一个简洁的 API 替代它。在 Visual Studio 中,智能感知功能允许您查看所有数据源属性,并将所需的字段绑定到网格列上。

这种技术在您修改数据源结构(例如删除一个数据源字段)或者在字段名称中出现拼写错误(比如试图访问一个不存在的字段)时,会生成防故障代码,这些操作会立即引发无法被忽略的异常。而传统的技术在某些情况下可能会忽略此类错误,从而生成"无效"代码,这些代码难以被检测到。

要使用此功能,请在您的代码中引用XtraGrid.Extension命名空间。

C#

cs 复制代码
using DevExpress.XtraGrid.Extensions;

VB.NET

vbnet 复制代码
Imports DevExpress.XtraGrid.Extensions

现在您可以调用ColumnView.With方法来添加和配置列,以下代码片段展示了示例内容:

C#

cs 复制代码
gridView1.With<Customer>(settings => {
settings.Columns
.Add(f => f.ContactName, col => {
col.Caption = "Contact";
col.SortOrder = DevExpress.Data.ColumnSortOrder.Descending;
col.SortIndex = 0;
})
.Add((f => f.Phone), c => { c.Caption = "Phone Number"; })
.Add(p => p.CompanyName)
.WithCaption("Company Name")
.WithGrouping()
.With(col => { });
});

VB.NET

vbnet 复制代码
gridView1.With(Of Customer)(Sub(settings)
settings.Columns.Add(Function(f) f.ContactName, Sub(col)
col.Caption = "Contact"
col.SortOrder = DevExpress.Data.ColumnSortOrder.Descending
col.SortIndex = 0
End Sub).Add((Function(f) f.Phone), Sub(c) c.Caption = "Phone Number").Add(Function(p) p.CompanyName).WithCaption("Company Name").WithGrouping().With(Sub(col)
End Sub)
End Sub)

借助fluent API,您可以使用 ColumnView.GetColumnViewSettings 方法来获取现有列并修改其设置。例如,以下代码是 GridView.RowCellStyle事件处理程序,它会识别与行单元格相关联的列,并如果该列是"Phone"则将其填充为红色:

C#

cs 复制代码
void gridView1_RowCellStyle(object sender, DevExpress.XtraGrid.Views.Grid.RowCellStyleEventArgs e) {
GridColumn col = (sender as ColumnView).GetColumnViewSettings<Customer>().Columns[c => c.Phone].AsColumn();
if((col!=null) && (e.Column == col)) {
e.Appearance.BackColor = Color.Red;
}
}

VB.NET

vbnet 复制代码
Private Sub gridView1_RowCellStyle(ByVal sender As Object, ByVal e As DevExpress.XtraGrid.Views.Grid.RowCellStyleEventArgs)
Dim col As GridColumn = (TryCast(sender, ColumnView)).GetColumnViewSettings(Of Customer)().Columns(Function(c) c.Phone).AsColumn()
If (col IsNot Nothing) AndAlso (e.Column Is col) Then
e.Appearance.BackColor = Color.Red
End If
End Sub
相关推荐
调试优选官7 小时前
2026GEO优化工具软件技术路径拆解:从监测机制到工程落地
.net·软件开发·技术分享·geo
步步为营DotNet20 小时前
.NET Aspire 在云原生微服务架构中的深度实践与剖析
云原生·架构·.net
light blue bird20 小时前
3C 数码电子BOM 协同工作台组件
java·开发语言·jvm·windows·.net·桌面端
三天不学习1 天前
【超详细】Vue3+UniApp+.NET8集成腾讯云IM即时通信全攻略
uni-app·.net·腾讯云·im·即时通信
步步为营DotNet2 天前
.NET 11 中 Native AOT 在云原生场景下的深度剖析与实践
云原生·.net
webmote2 天前
从零打造虚拟小智:用浏览器模拟 IoT 设备的实践之路
物联网·websocket·ai·大模型·llm·.net·小智
忧郁的蛋~2 天前
ASP.NET Core Web API 完全指南:请求管道、认证、错误处理到生产部署
前端·后端·asp.net·.net
rrokoko2 天前
“计算器” VB.NET源码
.net·源码·vb.net·计算器·计算器源码
rrokoko2 天前
“扫雷”游戏 VB.NET源码
游戏·.net·源码·vb.net
小满Autumn2 天前
CommunityToolkit.Mvvm 架构笔记:现代 MVVM、源生成器与工程化实践
笔记·架构·c#·.net·wpf·mvvm