DevExpress控件使用交流,DevExpress中国社区Dev联系电话 联系电话:023-68661681

界面控件DevExpress WinForms中文教程:Data Grid - 数据绑定(二)

来源:   发布时间:2026-03-10   浏览:19次

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正式版下载

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

切换到另一个数据源

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

DevExpress WinForms中文使用教程图集

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

C#

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

VB.NET

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#

gridControl1.DataSource = null;
gridView1.Columns.Clear();

VB.NET

gridControl1.DataSource = Nothing
gridView1.Columns.Clear()

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

C#

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

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#

using DevExpress.XtraGrid.Extensions;

VB.NET

Imports DevExpress.XtraGrid.Extensions

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

C#

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

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#

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

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

更多DevExpress线上公开课、中文教程资讯请上中文网获取

关于慧都科技

慧都是⼀家⾏业数字化解决⽅案公司,专注于软件、⽯油与⼯业领域,以深⼊的业务理解和⾏业经验,帮助企业实现智能化转型与持续竞争优势。

慧都科技是DevExpress的中国区的合作伙伴,DevExpress作为用户界面领域的优秀产品,帮助企业高效构建权限管理、数据可视化(如网格/图表/仪表盘)、跨平台系统(WinForms/ASP.NET/.NET MAUI)及行业定制解决方案,加速开发并强化交互体验。

本站文章除注明转载外,均为本站原创或翻译
欢迎任何形式的转载,但请务必注明出处,尊重他人劳动成果
转载请注明:文章转载自:DevExpress控件中文网 [https://www.devexpresscn.com/]
本文地址:https://www.devexpresscn.com/post/5660.html

相关产品: DevExpress WinForms Subscription, DevExpress Universal Subscription,

扫码咨询
电话咨询
023-68661681
返回
顶部