在用友金蝶等财务软件中,经常需要输入货币类型的数据, 那么这种输入框要如何制作呢?

扩展DataGridView 的功能  出自在天空飞翔博客 http://www.cnblogs.com/michaelhuwei/archive/2010/07/07/1772965.html

如果要使用DEV控件XtraGrid实现同样的效果

需要实现 GridView两个事件,CustomDrawCell和CustomDrawFooterCell

效果如下

实现代码如下

绘制单元格货币格式线条

private static void DrawCellLine(DevExpress.XtraGrid.Views.Base.RowCellCustomDrawEventArgs e,DevExpress.XtraGrid.Columns.GridColumn column,
DevExpress.XtraGrid.GridControl gridControl)
{
int P_WIDTH = ;
int fe = ;
string formatStr = string.Empty;
if (e.Column.FieldName == column.FieldName)
{
//获取设置小数位
if (e.Column.ColumnEdit != null)
{
formatStr = (e.Column.ColumnEdit.DisplayFormat as DevExpress.Utils.FormatInfo).GetDisplayText(e.CellValue);
fe = formatStr.Substring(formatStr.IndexOf('.') + ).Length;
}
else
{
formatStr = (e.Column.DisplayFormat as FormatInfo).GetDisplayText(e.CellValue);
fe = formatStr.Substring(formatStr.IndexOf('.') + ).Length;
} //画出10个整数位,2个小数位
for (int i = ; i < (e.Bounds.Width / ) - fe; i++)
{
if (i % == )
{
e.Graphics.DrawLine(Pens.DarkCyan, e.Bounds.Left + i * P_WIDTH, ,
e.Bounds.Left + i * P_WIDTH, gridControl.Height);
}
else
{
e.Graphics.DrawLine(Pens.LightGray, e.Bounds.Left + i * P_WIDTH, ,
e.Bounds.Left + i * P_WIDTH, gridControl.Height);
}
}
e.Graphics.DrawLine(Pens.Red, e.Bounds.Left + ((e.Bounds.Width / ) - fe) * P_WIDTH, , e.Bounds.Left + ((e.Bounds.Width / ) - fe) * P_WIDTH,
gridControl.Height);
if (fe > )
{
for (int j = ; j < fe - ; j++)
{
e.Graphics.DrawLine(Pens.LightGray, e.Bounds.Left + ((e.Bounds.Width / ) - fe++j) * P_WIDTH, , e.Bounds.Left + ((e.Bounds.Width / ) - fe++j) * P_WIDTH,
gridControl.Height);
}
}
//e.Graphics.DrawLine(Pens.DarkCyan,
var sf = new StringFormat
{
Alignment = StringAlignment.Center,
LineAlignment = StringAlignment.Center
};
decimal v = Convert.ToDecimal(e.CellValue);
string s_int = ((int)v).ToString();
//两位小数 string s_dec = formatStr.ToString().Substring(formatStr.ToString().IndexOf('.')+, fe);
string s_value = s_int + s_dec;
for (int i = ; i < s_value.Length; i++)
{
string ch = s_value[s_value.Length - i - ].ToString();
int x = e.Bounds.Left + ((e.Bounds.Width / ) - i - ) * P_WIDTH;
int y = e.Bounds.Top;
var rect = new RectangleF(x, y, P_WIDTH, e.Bounds.Height);
e.Graphics.DrawString(ch, e.Column.AppearanceCell.Font, Brushes.Black, rect, sf);
}
e.Handled = true;
}
}
private void gridView1_CustomDrawCell(object sender, DevExpress.XtraGrid.Views.Base.RowCellCustomDrawEventArgs e)
{
DrawCellLine(e, colCName,gridControl1);
}

绘制汇总货币格式线条

 private static void DrawCellLine(DevExpress.XtraGrid.Views.Grid.FooterCellCustomDrawEventArgs e, DevExpress.XtraGrid.Columns.GridColumn column,
DevExpress.XtraGrid.GridControl gridControl)
{
int P_WIDTH = ;
int fe = ;
string formatStr = string.Empty;
if (e.Column.FieldName == column.FieldName)
{
//获取设置小数位
if (e.Column.ColumnEdit != null)
{
formatStr = (e.Column.ColumnEdit.DisplayFormat as DevExpress.Utils.FormatInfo).GetDisplayText(e.Info.Value);
fe = formatStr.Substring(formatStr.IndexOf('.') + ).Length;
}
else
{
formatStr = (e.Column.DisplayFormat as FormatInfo).GetDisplayText(e.Info.Value);
fe = formatStr.Substring(formatStr.IndexOf('.') + ).Length;
} //画出10个整数位,2个小数位
for (int i = ; i < (e.Bounds.Width / ) - fe; i++)
{
if (i % == )
{
e.Graphics.DrawLine(Pens.DarkCyan, e.Bounds.Left + i * P_WIDTH, ,
e.Bounds.Left + i * P_WIDTH, gridControl.Height);
}
else
{
e.Graphics.DrawLine(Pens.LightGray, e.Bounds.Left + i * P_WIDTH, ,
e.Bounds.Left + i * P_WIDTH, gridControl.Height);
}
}
e.Graphics.DrawLine(Pens.Red, e.Bounds.Left + ((e.Bounds.Width / ) - fe) * P_WIDTH, , e.Bounds.Left + ((e.Bounds.Width / ) - fe) * P_WIDTH,
gridControl.Height);
if (fe > )
{
for (int j = ; j < fe - ; j++)
{
e.Graphics.DrawLine(Pens.LightGray, e.Bounds.Left + ((e.Bounds.Width / ) - fe + + j) * P_WIDTH, , e.Bounds.Left + ((e.Bounds.Width / ) - fe + + j) * P_WIDTH,
gridControl.Height);
}
}
//e.Graphics.DrawLine(Pens.DarkCyan,
var sf = new StringFormat
{
Alignment = StringAlignment.Center,
LineAlignment = StringAlignment.Center
};
decimal v = Convert.ToDecimal(e.Info.Value);
string s_int = ((int)v).ToString();
//两位小数 string s_dec = formatStr.ToString().Substring(formatStr.ToString().IndexOf('.') + , fe);
string s_value = s_int + s_dec;
for (int i = ; i < s_value.Length; i++)
{
string ch = s_value[s_value.Length - i - ].ToString();
int x = e.Bounds.Left + ((e.Bounds.Width / ) - i - ) * P_WIDTH;
int y = e.Bounds.Top;
var rect = new RectangleF(x, y, P_WIDTH, e.Bounds.Height);
e.Graphics.DrawString(ch, e.Column.AppearanceCell.Font, Brushes.Black, rect, sf);
}
e.Handled = true;
}
}
private void gridView1_CustomDrawFooterCell(object sender, FooterCellCustomDrawEventArgs e)
{
DrawCellLine(e, colCName, gridControl1);
}

DEV 财务货币格式单元格的更多相关文章

  1. Dev控件GridView单元格绑定控件

    Dev控件GridView单元格绑定控件 //文本按钮 RepositoryItemButtonEdit btnFields = new RepositoryItemButtonEdit();//创建 ...

  2. Excel日期格式单元格写成yyyy.MM.dd格式将无法读取到DataTable

    最近在改公司的订单系统,遇到了一个奇怪的问题.C#程序需要从Excel文件中将数据全部读取到DataTable,其中Excel文件的第一列是日期格式yyyy/MM/dd,而这一列中大部分的单元格都是按 ...

  3. Dev控件VGridView单元格绑定控件

    实现的效果如下图: 1,实现分组显示 2,每行所绑定的控件不统一,内容自定义 实现方法: 采用VGridControl进行内容的定制 首先根据XML文件进行数据填充

  4. dev gridcontrol纵向合并单元格设置

    1.要设置gridcontrol中指定列(columns中选中指定列)的AllowMerge属性为true; 2.要设置gridview中AllowCellMerge的属性为true; 3.如果只合并 ...

  5. Excel单元格内容太多会覆盖遮住下一单元格范围

    Excel单元格内容太多会覆盖遮住下一单元格范围分步阅读 Excel中的单元格内容,有着不同的对齐方式.用户可根据自己的需求,在处理数据的时候,自行设置所需要的对齐方式. 当您在处理数据的时候,如果设 ...

  6. excel单元格内换行的方法

    方法一:调整单元格格式换行 选定单元格,选择“格式→单元格”,在弹出的对话框中单击“对齐”,选中“自动换行”,单击[确定]按钮即可. 方法二:Alt+Enter键(使用强行换行时,系统会同时选择自动换 ...

  7. Excel2007VBA数组和工作表及单元格的引用

    动态数组使用: https://zhidao.baidu.com/question/1432222709706721499.html 使用Redim动态数组即可. 1 2 3 4 5 6 7 8 Su ...

  8. 在一个Excel单元格内输入多行内容

    有时候,我们想在一个Excel单元格中输入多行内容,可以根据不同情况选择下面的方法来实现: 方法一:如果有大量的单元格需要这样做,采取此种设置格式的方法,选中需要这种格式的单元格,执行“格式→单元格” ...

  9. DEV gridview根据单元格值改变其他单元格格式

    string style = ""; private void gridView1_RowCellStyle(object sender, DevExpress.XtraGrid. ...

随机推荐

  1. Swift_3.0_取消杂乱无章的log输出

    一 举例: 输出的杂乱无章的东西 subsystem: com.apple.UIKit, category: HIDEventFiltered, enable_level: , persist_lev ...

  2. js中this的四种调用模式

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...

  3. UWP开发入门(十九)——10分钟学会在VS2015中使用Git

    写程序必然需要版本控制,哪怕是个人项目也是必须的.我们在开发UWP APP的时候,VS2015默认提供了对微软TFS和Git的支持.考虑到现在Git很火,作为微软系的程序员也不得不学一点防身,以免被开 ...

  4. Vim杂记:Sublime的配色方案

    一.前言 爱美之心人皆有之,sublime的配色实在好看,于是希望Vim也能这样. 二.配置 1.下载monokai(https://github.com/sickill/vim-monokai),然 ...

  5. ASP.NET运行时详解 生命周期入口分析

    说起ASP.NET的生命周期,网上有很多的介绍.之前也看了些这方面的博客,但我感觉很多程序猿像我一样,看的时候似乎明白,一段时间过后又忘了.所以,最近Heavi花了一段时间研究ASP.NET的源代码, ...

  6. WPF,给颜色SolidColorBrush添加动画

    /// <summary> /// 设置颜色动画 /// </summary> /// <returns></returns> private Soli ...

  7. knockout的依赖属性dependentObservable的参数 和Value转换器

    可写的依赖监控属性ko.dependentObservable的参数 read:   必选,一个用来执行取得依赖监控属性当前值的函数write:  可选,如果声明将使你的依赖属性可写,别的代码如果这个 ...

  8. gene框架文档 - 概述

    欢迎使用Gene框架 最新版本:V1.2.2 开源地址:https://github.com/sasou/php-gene 作者:sasou 文档地址:http://php-gene.com/doc ...

  9. Visual Studio 2013 Preview 新功能

    先来看一下Visual Studio的版本历史: 1. Visual Studio.NET 2002 2. Visual Studio.NET 2003 3. Visual Studio.NET 20 ...

  10. Android破解之Lic文件加密程序(首例)

    我不会写Android,这是我第一个破解Android的例子,耗时接近一天,希望大神不要见笑! 本程序为商业软件,不便发布APK程序. 不要给我发消息,我不得回,有问题,直接回帖就可以了. 准备工作 ...