DevExpress WPF拥有120个控件和库将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。 无论是Office办公软件的衍伸产品还是以数据为中心的商业智能产品都能通过DevExpress WPF控件来实现。未绑定列未绑定到数据源中的字段这些列允许您根据绑定列中的值计算值或显示来自自定义数据源的数据。DevExpress WPF GridControl中绑定列和未绑定列的功能是相同的您可以按照与绑定列相同的方式对未绑定列进行排序、分组、显示摘要和筛选。DevExpress新旧版本帮助文档获取可点击这篇文章查看——《界面控件DevExpress v26.1帮助文档大全CHM版本》添加一个未绑定列1. 向GridControl.Columns集合添加一个GridColumn对象。2. 将UnboundDataType属性设置为列应存储的值的类型GridControl根据该属性值选择列的默认编辑器。要替换编辑器请使用ColumnBase.EditSettings属性。3. 为ColumnBase.FieldName属性分配一个唯一的字段名字段名不能与另一列的字段名或数据源字段名相匹配。4. 使用以下技术当中的一个向未绑定列填充数据指定一个计算列值的表达式ColumnBase.UnboundExpression表达式部分描述了支持的语法。处理GridControl.CustomUnboundColumnData/TreeListView.CustomUnboundColumnData事件来指定未绑定的列值。XAMLWindow ... xmlns:dxghttp://schemas.devexpress.com/winfx/2008/xaml/grid xmlns:sysclr-namespace:System;assemblymscorlib dxg:GridControl x:Namegrid !-- ... -- dxg:GridColumn FieldNameTotal UnboundDataType{x:Type sys:Decimal} UnboundExpression[Quantity] * [UnitPrice]/ /dxg:GridControlC#grid.Columns.Add(new DevExpress.Xpf.Grid.GridColumn() { FieldName Total, UnboundDataType typeof(decimal), UnboundExpression [Quantity] * [UnitPrice] });VB.NETgrid.Columns.Add(New DevExpress.Xpf.Grid.GridColumn() With { .FieldName Total, .UnboundDataType GetType(Decimal), .UnboundExpression [Quantity] * [UnitPrice] })您也可以使用GridControl.CustomUnboundColumnDataCommand/TreeListView.CustomUnboundColumnDataCommand属性来维护一个干净的MVVM模式并在ViewModel中填充未绑定的列。XAMLdxg:GridControl ItemsSource{Binding Items} CustomUnboundColumnDataCommand{Binding UnboundColumnDataCommand} !-- ... -- dxg:GridColumn FieldNameTotal UnboundDataType{x:Type sys:Decimal}/ /dxg:GridControlC#[Command] public void UnboundColumnData(UnboundColumnRowArgs args) { if(args.IsGetData) { var item (Product)args.Item; args.Value item.UnitPrice * item.Quantity; } }VB.NETCommand Public Sub UnboundColumnData(ByVal args As UnboundColumnRowArgs) If args.IsGetData Then Dim item CType(args.Item, Product) args.Value item.UnitPrice * item.Quantity End If End Sub编辑未绑定列数据在大多数情况下未绑定列的数据是从自定义数据源获取的或者根据绑定列的值计算。如果从自定义数据源检索未绑定数据则可以对其进行编辑。在用户更改了未绑定列的值之后应该将该值保存回网格的数据源。要为未绑定列提供数据并将任何更改保存到自定义数据源请处理GridControl.CustomUnboundColumnData 事件。请注意此事件仅针对未绑定的列引发。显示未绑定数据事件参数的ColumnDataEventArgsBase.IsGetData属性返回true将为每个数据行引发事件从而允许指定未绑定列的值。网格数据源中被处理的行索引由GridColumnDataEventArgs.ListSourceRowIndex属性返回应该给ColumnDataEventArgsBase.Value属性分配一个值。保存更改事件参数的ColumnDataEventArgsBase.IsSetData属性返回trueColumnDataEventArgsBase.Value属性包含应该保存到自定义数据源的修改后的单元格值。下面的代码示例使用Dictionary创建一个可编辑的未绑定列XAMLdxg:GridControl Namegrid AutoGenerateColumnsAddNew EnableSmartColumnsGenerationTrue ItemsSource{Binding List} CustomUnboundColumnDatagrid_CustomUnboundColumnData dxg:GridControl.Columns dxg:GridColumn FieldNameMyUnboundColumn UnboundDataType{x:Type sys:String}/ !-- ... -- /dxg:GridControl.Columns /dxg:GridControlC#Dictionaryint, string unboundData new Dictionaryint, string(); unboundData[0] MyText; //... private void grid_CustomUnboundColumnData(object sender, GridColumnDataEventArgs e) { if (e.Column.FieldName MyUnboundColumn) { // Populate columns if (e.IsGetData) { if (unboundData.ContainsKey(e.ListSourceRowIndex)) e.Value unboundData[e.ListSourceRowIndex]; } // Post edited values to the underlying data source if (e.IsSetData e.Value ! null) { unboundData[e.ListSourceRowIndex] e.Value.ToString(); } } }VB.NETDictionaryint, string unboundData new Dictionaryint, string(); unboundData[0] MyText; ... Private Sub grid_CustomUnboundColumnData(ByVal sender As Object, ByVal e As GridColumnDataEventArgs) If e.Column.FieldName MyUnboundColumn Then Populate columns If e.IsGetData Then If unboundData.ContainsKey(e.ListSourceRowIndex) Then e.Value unboundData(e.ListSourceRowIndex) End If Post edited values to the underlying data source If e.IsSetData AndAlso e.Value IsNot Nothing Then unboundData(e.ListSourceRowIndex) e.Value.ToString() End If End If End Sub