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

扩展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. [git]使用GPG签名你的commit

    概述 GPG是一种加密算法,现在github支持commit使用GPG加密,从而保证提交的commit在传输的过程中没有被篡改. 一.生成GPG密钥 什么是GPG:阮一峰的GPG教程 安装GPG:br ...

  2. Android学习笔记之使用百度地图实现Poi搜索

    PS:装个系统装了一天.心力憔悴.感觉不会再爱了. 学习内容: 1.使用百度Map实现Poi搜索. 2.短串分享 3.在线建议查询   百度地图的研究也算是过半了.能够实现定位,实现相关信息的搜索,实 ...

  3. python编码声明的位置很重要

    python在3.x版本之前,编码一直是一个很头痛的问题.在代码中如果要使用中文,通常都要在文件的头部注明# -*- coding:utf-8 -*- 这样IDE或者解释器才会智能的转换编码. 这其中 ...

  4. C#语法糖之 cache操作类 asp.net

    因为考虑到我下面我将写session cookies 等 操作类 ,与cache具有共性. 所以都统一继承了IHttpStorageObject  abstract class 来保函数风格的统一 , ...

  5. 优化C/C++代码的小技巧

    说明: 无意看到一篇小短文,猜测作者应该是一个图形学领域的程序员或专家,介绍了在光线(射线)追踪程序中是如何优化C/C++代码的.倒也有一些参考意义,当然有的地方我并不赞同或者说我也不完全理解,原文在 ...

  6. C#入门经典第五版之变量与表达式编码题训练

    问题:编写一个控制台应用程序,要求用户输入4个int值,并显示它们的乘积.提示:可以使用Convert.ToDouble()命令,把用户在控制台上输入的数转换为double, 以此类推,转换成int命 ...

  7. 【原创】记一次Sql2008R2的数据库订阅发布遇到的问题!

    1.首先新建一个空的数据库 CreditTest,里面没有任何表结构,视图,数据等. 2.在已连接的服务器的下方找到“复制”选项,然后兴建发布: ...(新建发布成功) ...(新建订阅成功) 3.问 ...

  8. JavaScript执行顺序分析

    之前从JavaScript引擎的解析机制来探索JavaScript的工作原理,下面我们以更形象的示例来说明JavaScript代码在页面中的执行顺序.如果说,JavaScript引擎的工作机制比较深奥 ...

  9. Python入门笔记(23):模块

    一.模块基础 1.模块 自我包含,且有组织的代码片段就是模块 模块是Pyhon最高级别的程序组织单元,它将程序代码和数据封装起来以便重用.实际的角度,模块往往对应Python程序文件. 每个文件都是一 ...

  10. PHP图像处理类库及演示分享

    简单写了一个PHP的图像处理类库,虽然功能比较少,但是目前也没用到太高级的,以后用到了再填吧,或者哪位给点建议加上什么功能,或者有什么需求可以跟我说,我有时间加上,如果哪位对这个类库进行了扩展的话,还 ...