首页 > 其他分享 >DevExpress WinForms中文教程:Data Grid - 如何创建未绑定列

DevExpress WinForms中文教程:Data Grid - 如何创建未绑定列

时间:2024-10-30 10:01:03浏览次数:1  
标签:ToDecimal Convert rowIndex DevExpress 绑定 WinForms Grid GetListSourceRowCellValue

本教程将介绍:

  • 在设计时创建未绑定列
  • 在设计时为未绑定列指定表达式
  • 在运行时编辑表达式
  • 向代码中的未绑定列提供数据
  • 编辑未绑定列中的单元格值并保存更改

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

获取DevExpress WinForms v24.1正式版下载

DevExpress技术交流群10:532598169      欢迎一起进群讨论

起点

一个与Northwind数据库的“Order Details”表绑定的数据网格应用程序。

DevExpress WinForms中文教程图集
在设计时创建未绑定列

1. 打开DevExpress WinForms Data Grid的智能标记,单击Add Column来创建列。

DevExpress WinForms中文教程图集

2. 选择此列并设置其GridColumn.FieldName属性为唯一的字符串:“DiscountAmount”。

DevExpress WinForms中文教程图集

3. 将列的GridColumn.UnboundDataType属性设置为有效的数据类型。在本教程中,使用System.Decimal值。

DevExpress WinForms中文教程图集
在设计时指定表达式

1. 使用GridColumn.UnboundExpression 属性:单击省略号按钮打开Expression Editor(表达式编辑器)。

DevExpress WinForms中文教程图集

2. 创建一个简单表达式,乘以三个字段:“Quantity”, “Unit Price”, “Discount”。

DevExpress WinForms中文教程图集

3. 将OptionsColumn.AllowEdit属性设置为false来使该列只读。

DevExpress WinForms中文教程图集

TIP:将列的FormatInfo.FormatType设置为FormatType.Numeric,将FormatInfo.FormatString设置为c2,来将列值格式化为货币。

在运行时编辑未绑定列的表达式

将列的GridColumn.ShowUnboundExpressionMenu属性设置为true,来允许用户在运行时修改未绑定列的表达式。

DevExpress WinForms中文教程图集

用户可以在运行时从列的上下文菜单调用表达式编辑器来更改表达式。

DevExpress WinForms中文教程图集
向事件上的未绑定列提供数据

1. 创建另一个列,设置GridColumn.FieldName为Total,GridColumn.UnboundDataType为System.Decimal。

2. 选择“gridView1”,并在属性面板的“Events”页面上订阅ColumnView.CustomUnboundColumnData事件。

注意:ColumnView.CustomUnboundColumnData事件在每次即将显示列值时和修改列单元格后(当需要发布数据时)触发。

3. 如果e.IsGetData事件参数为true,则使用ColumnView.GetListSourceRowCellValue方法检索Quantity、UnitPrice和Discount列的值。计算未绑定列的值,并将其分配给e.Value事件参数。

C#

void gridView_CustomUnboundColumnData(object sender, DevExpress.XtraGrid.Views.Base.CustomColumnDataEventArgs e) {
GridView view = sender as GridView;
if(view == null) return;
int rowIndex = e.ListSourceRowIndex;
decimal unitPrice = Convert.ToDecimal(view.GetListSourceRowCellValue(rowIndex, "UnitPrice"));
decimal quantity = Convert.ToDecimal(view.GetListSourceRowCellValue(rowIndex, "Quantity"));
decimal discount = Convert.ToDecimal(view.GetListSourceRowCellValue(rowIndex, "Discount"));
if (e.Column.FieldName != "Total") return;
if (e.IsGetData)
e.Value = unitPrice * quantity * (1 - discount);
}

VB.NET

Private Sub gridView_CustomUnboundColumnData(ByVal sender As Object, ByVal e As DevExpress.XtraGrid.Views.Base.CustomColumnDataEventArgs)
Dim view As GridView = TryCast(sender, GridView)
If view Is Nothing Then
Return
End If
Dim rowIndex As Integer = e.ListSourceRowIndex
Dim unitPrice As Decimal = Convert.ToDecimal(view.GetListSourceRowCellValue(rowIndex, "UnitPrice"))
Dim quantity As Decimal = Convert.ToDecimal(view.GetListSourceRowCellValue(rowIndex, "Quantity"))
Dim discount As Decimal = Convert.ToDecimal(view.GetListSourceRowCellValue(rowIndex, "Discount"))
If e.Column.FieldName <> "Total" Then
Return
End If
If e.IsGetData Then
e.Value = unitPrice * quantity * (1 - discount)
End If
End Sub
编辑未绑定列中的单元格值

在编辑时,需要在未绑定列中保存更改。为此,您可以使用ColumnView.CustomUnboundColumnData事件。

下面的代码将Total列单元格中的更改保存到一个字典中,e.IsSetData事件参数指示未绑定列中的单元格值是否被修改。

C#

Dictionary<int, decimal> customTotals = new Dictionary<int, decimal>();

private void gridView1_CustomUnboundColumnData(object sender, DevExpress.XtraGrid.Views.Base.CustomColumnDataEventArgs e) {
GridView view = sender as GridView;
if(view == null) return;
int rowIndex = e.ListSourceRowIndex;
decimal unitPrice = Convert.ToDecimal(view.GetListSourceRowCellValue(rowIndex, "UnitPrice"));
decimal quantity = Convert.ToDecimal(view.GetListSourceRowCellValue(rowIndex, "Quantity"));
decimal discount = Convert.ToDecimal(view.GetListSourceRowCellValue(rowIndex, "Discount"));
if (e.Column.FieldName != "Total") return;
if (e.IsGetData) {
if (!customTotals.ContainsKey(rowIndex))
customTotals.Add(rowIndex, unitPrice * quantity * (1 - discount));
e.Value = customTotals[rowIndex];
}
if (e.IsSetData) {
customTotals[rowIndex] = Convert.ToDecimal(e.Value);
}
}

VB.NET

Private customTotals As New Dictionary(Of Integer, Decimal)()

Private Sub gridView1_CustomUnboundColumnData(ByVal sender As Object, ByVal e As DevExpress.XtraGrid.Views.Base.CustomColumnDataEventArgs)
Dim view As GridView = TryCast(sender, GridView)
If view Is Nothing Then
Return
End If
Dim rowIndex As Integer = e.ListSourceRowIndex
Dim unitPrice As Decimal = Convert.ToDecimal(view.GetListSourceRowCellValue(rowIndex, "UnitPrice"))
Dim quantity As Decimal = Convert.ToDecimal(view.GetListSourceRowCellValue(rowIndex, "Quantity"))
Dim discount As Decimal = Convert.ToDecimal(view.GetListSourceRowCellValue(rowIndex, "Discount"))
If e.Column.FieldName <> "Total" Then
Return
End If
If e.IsGetData Then
If Not customTotals.ContainsKey(rowIndex) Then
customTotals.Add(rowIndex, unitPrice * quantity * (1 - discount))
End If
e.Value = customTotals(rowIndex)
End If
If e.IsSetData Then
customTotals(rowIndex) = Convert.ToDecimal(e.Value)
End If
End Sub

标签:ToDecimal,Convert,rowIndex,DevExpress,绑定,WinForms,Grid,GetListSourceRowCellValue
From: https://www.cnblogs.com/AABBbaby/p/18515192

相关文章

  • 基于Material Design风格开源、免费的WinForms UI控件库
    前言今天大姚给大家分享一个基于Google的MaterialDesign风格开源、免费的.NETWinFormsUI控件库:MaterialSkin。WinForms介绍WinForms是一个传统的桌面应用程序框架,它基于Windows操作系统的原生控件和窗体。通过简单易用的API,开发者可以快速构建基于窗体的应用程序,并且......
  • 点云学习笔记2——使用VoxelGrid滤波器进行点云降采样(c++)
    #include<iostream>#include<pcl/point_cloud.h>#include<pcl/io/pcd_io.h>#include<pcl/point_types.h>#include<pcl/filters/voxel_grid.h>#include<pcl/common/common_headers.h>#include<pcl/io/pcd_io.h>#inclu......
  • UI组件DevExpress ASP.NET Bootstrap - 支持Bootstrap v5.3.3和暗黑模式
    在本文中,我们将详细介绍DevExpressBootstrap控件升级到Bootstrapv5.3.3、增强了DevExpressBootstrap项目模板的安全相关更新,以及对颜色模式的支持等。P.S.:DevExpress ASP.NETBootstrap Controls利用轻量级渲染、响应式布局和现代性能优化技术,扩展网站的受众范围并提高搜索......
  • Qt gridLayout布局占两格或两列在ui文件中实现
         在Qt  gridLayou布局里添加一个控件如何设置其占两格或多格   如下图:             一、如果是纯代码编写的界面 (大多是这个方式)     在纯代码编写的界面应用中,可以使用函数QGridLayout::addWidget(QWidget*w,intr......
  • 界面控件DevExpress WPF v24.1新版亮点:属性网格、轻量级主题升级
    DevExpressWPF拥有120+个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpressWPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。DevExpressWPF控件今年一个重大版本——v24.1全......
  • DataGridView控件使用学习
    一、DataGridView控件及元素初始化//DataGridView控件初始化publicSystem.Windows.Forms.DataGridViewdataGridView1;this.dataGridView1=newSystem.Windows.Forms.DataGridView();//DataGridView列初始化publicSystem.Windows.Forms.DataGridViewCheckBoxColumnCol......
  • # wpf Grid布局
    wpfGrid布局效果GridDemo\GridDemo\MainWindow.xaml<Windowx:Class="GridDemo.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml&q......
  • C# DataGridView 禁用或灰显单元格 只读 清除单元格选择
    1.清除单元格选择DataGridView.ClearSelection();效果2.单元格灰显//单元格设为只读DataGridView.ReadOnly=true;//表格背景色DataGridView.BackgroundColor=SystemColors::Control;//标题栏背景色DataGridView.ColumnHeadersDefaultCellStyle.BackColor=Sys......
  • CSS Grid与Flexbox有何不同
    CSSGrid与Flexbox的不同点:1.定位方式不同;2.维度不同;3.主轴与交叉轴不同;4.对齐方式不同;5.元素排序不同;6.应用场景不同;7.自适应性不同等。Flexbox(弹性盒子模型)主要用于一维布局,即在行或列的方向上布局,Grid(网格布局)适用于二维布局,可以同时定义行和列的结构。1.定位方式不......
  • 网格元素-grid-area
    发现一个好用的界面布局css属性<!DOCTYPEhtml><html><head><metacharset="utf-8"><title>菜鸟教程(runoob.com)</title><style>.item1{grid-area:header;}.item2{grid-area:menu;}.item3{grid-area:main;}.item......