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

扩展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. poi中getPhysicalNumberOfRows()和getLastRowNum()区别

    getPhysicalNumberOfRows()获取的是物理行数,也就是不包括那些空行(隔行)的情况. getLastRowNum()获取的是最后一行的编号(编号从0开始). 通过getPhysic ...

  2. 2015腾讯暑期实习生 Web前端开发 面试经历

    [2015腾讯暑期实习生 Web前端开发 面试经历] 好吧,首先声明,我被刷了,应该是跪在二面 微信查到的面试状态一直呈现复试中 .. 整整四天了.. 看来是没希望了 不过也是一次经历,记录一下还是可 ...

  3. JS 函数--Date()函数

    1.JavaScript没有基本的日期数据类型,所以只能显式的创建Date对象.例如:var myDate=new Date(); 2.为了创建一个存储了特定日期的,或者时间的Date对象,可以简单的 ...

  4. 重构第17天提取父类(Extract SuperClass)

    今天的重构来自 Martin Fowler的http://refactoring.com/catalog/extractSuperclass.html. 理解:本文中的“提取父类”是指类中有一些字段或 ...

  5. 【C#】第1章 VS2015中C#6的新特性

    分类:C#.VS2015 创建日期:2016-06-12 一.简介 VS2015内置的C#版本为6.0,该版本提供了一些新的语法糖,这里仅列出个人感觉比较有用的几个新功能. 二.几个很有用的新特性 注 ...

  6. 行转列一定要sum

    --SELECT 姓名 ,-- 课程 ,-- 分数--FROM tb UNPIVOT ( 分数 FOR 课程 IN ( [语文], [数学], [物理] ) ) t --)

  7. python之import机制

    1. 标准 import        Python 中所有加载到内存的模块都放在 sys.modules .当 import 一个模块时首先会在这个列表中查找是否已经加载了此模块,如果加载了则只是将 ...

  8. NYOJ:题目860 又见01背包

    题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=860 方法一:不用滚动数组(方法二为用滚动数组,为方法一的简化) 动态规划分析:最少要拿总 ...

  9. ahjesus 部署lighttpd

    这个就不写了,直接传送门过去看,按照说的做就可以了 如果你想要安装最新版的,传送门 需要注意的是configure这一步,你看完他的help以后还要输入 ./configure 才能继续下一步 再就是 ...

  10. CentOS 编译安装 MySQL5.7

    下载 所有版本下载地址: http://dev.mysql.com/downloads/mysql/ 此处用 5.7.10 wget http://dev.mysql.com/get/Download ...