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

扩展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. 1 Servlet开篇准备

    作者:禅楼望月(http://www.cnblogs.com/yaoyinglong) 1. HTTP协议 HTTP协议是TCP/IP协议的上层协议.TCP负责确保从一个网络节点向另一个网络节点发送的 ...

  2. Configuring Service Broker for Asynchronous Processing

    Configuring Service Broker for Asynchronous Processing --create a database and enable the database f ...

  3. Node.js爬虫抓取数据 -- HTML 实体编码处理办法

    cheerio DOM化并解析的时候 1.假如使用了 .text()方法,则一般不会有html实体编码的问题出现 2.如果使用了 .html()方法,则很多情况下(多数是非英文的时候)都会出现,这时, ...

  4. HTML-DIV布局

    <DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content= ...

  5. 如何彻底的卸载sql server数据库

    如何彻底的卸载sql server数据库    好不容易装上了sql server 2012数据库,可是却不能连接本地的数据库,后来发现缺少一些服务,于是决定重新安装,但是卸载却很麻烦,如果卸载不干净 ...

  6. linq之orderby子句

    在Linq查询中,orderby 子句可以对查询结果集进行排序,可以升序也可以降序,排序关键字可以是多个.默认排序方式为升序. 下面的实例代码OrderQuery()中演示了orderby子句对查询的 ...

  7. 一个让echarts中国地图包含省市轮廓的技巧

    背景知识及应用简介 本文主要介绍一个使用ECharts地图组件的取巧方法,该技巧源于实际需求中遇到的问题,一般没有该需求的话这个技巧也是用不到的.有前端基础和以及对ECharts有了解的人基本可以读懂 ...

  8. .NET程序的编译和运行

    程序的编译和运行,总得来说大体是:首先写好的程序是源代码,然后编译器编译为本地机器语言,最后在本地操作系统运行. 下图为传统代码编译运行过程: .NET的编译和运行过程与之类似,首先编写好的源代码,然 ...

  9. windbg学习进阶之——windbg字段名及其意义

    要使用windbg分析dump必须加载正确的符号,可以通过设置Symbols File Path为"D:/Symbols;SRV*D:/Symbols*http://msdl.microso ...

  10. 【JS复习笔记】01 基本语法

    数字: JS只有一种数字类型,相当于double.(不知道为什么,我每次打double输入法都会出现逗比了三个字) NaN是一个数值,可以用isNaN(number)检测NaN Infinity表示所 ...