• DEV 财务货币格式单元格


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

    扩展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 = 10;
                int fe = 2;
                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('.') + 1).Length;
                    }
                    else
                    {
                        formatStr = (e.Column.DisplayFormat as FormatInfo).GetDisplayText(e.CellValue);
                        fe = formatStr.Substring(formatStr.IndexOf('.') + 1).Length;
                    }
    
                    //画出10个整数位,2个小数位
                    for (int i = 1; i < (e.Bounds.Width / 10) - fe; i++)
                    {
                        if (i % 3 == 0)
                        {
                            e.Graphics.DrawLine(Pens.DarkCyan, e.Bounds.Left + i * P_WIDTH, 0,
                                              e.Bounds.Left + i * P_WIDTH, gridControl.Height);
                        }
                        else
                        {
                            e.Graphics.DrawLine(Pens.LightGray, e.Bounds.Left + i * P_WIDTH, 0,
                                              e.Bounds.Left + i * P_WIDTH, gridControl.Height);
                        }
                    }
                    e.Graphics.DrawLine(Pens.Red, e.Bounds.Left + ((e.Bounds.Width / 10) - fe) * P_WIDTH, 0, e.Bounds.Left + ((e.Bounds.Width / 10) - fe) * P_WIDTH,
                                     gridControl.Height);
                    if (fe > 1)
                    {
                        for (int j = 0; j < fe - 1; j++)
                        {
                            e.Graphics.DrawLine(Pens.LightGray, e.Bounds.Left + ((e.Bounds.Width / 10) - fe+1+j) * P_WIDTH, 0, e.Bounds.Left + ((e.Bounds.Width / 10) - fe+1+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('.')+1, fe);
                    string s_value = s_int + s_dec;
                    for (int i = 0; i < s_value.Length; i++)
                    {
                        string ch = s_value[s_value.Length - i - 1].ToString();
                        int x = e.Bounds.Left + ((e.Bounds.Width / 10) - i - 1) * 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 = 10;
                int fe = 2;
                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('.') + 1).Length;
                    }
                    else
                    {
                        formatStr = (e.Column.DisplayFormat as FormatInfo).GetDisplayText(e.Info.Value);
                        fe = formatStr.Substring(formatStr.IndexOf('.') + 1).Length;
                    }
    
                    //画出10个整数位,2个小数位
                    for (int i = 1; i < (e.Bounds.Width / 10) - fe; i++)
                    {
                        if (i % 3 == 0)
                        {
                            e.Graphics.DrawLine(Pens.DarkCyan, e.Bounds.Left + i * P_WIDTH, 0,
                                              e.Bounds.Left + i * P_WIDTH, gridControl.Height);
                        }
                        else
                        {
                            e.Graphics.DrawLine(Pens.LightGray, e.Bounds.Left + i * P_WIDTH, 0,
                                              e.Bounds.Left + i * P_WIDTH, gridControl.Height);
                        }
                    }
                    e.Graphics.DrawLine(Pens.Red, e.Bounds.Left + ((e.Bounds.Width / 10) - fe) * P_WIDTH, 0, e.Bounds.Left + ((e.Bounds.Width / 10) - fe) * P_WIDTH,
                                     gridControl.Height);
                    if (fe > 1)
                    {
                        for (int j = 0; j < fe - 1; j++)
                        {
                            e.Graphics.DrawLine(Pens.LightGray, e.Bounds.Left + ((e.Bounds.Width / 10) - fe + 1 + j) * P_WIDTH, 0, e.Bounds.Left + ((e.Bounds.Width / 10) - fe + 1 + 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('.') + 1, fe);
                    string s_value = s_int + s_dec;
                    for (int i = 0; i < s_value.Length; i++)
                    {
                        string ch = s_value[s_value.Length - i - 1].ToString();
                        int x = e.Bounds.Left + ((e.Bounds.Width / 10) - i - 1) * 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);
     } 
  • 相关阅读:
    Python 函数 -range()
    Python 函数 -xrange()
    Python 函数 -globals()
    Python 函数-max()
    Python 函数 -hasattr()
    Python 函数 memoryview()
    Python函数 hash()
    QAQ
    Õ() Big-O-notation
    一道有趣的条件概率题
  • 原文地址:https://www.cnblogs.com/xxrl-c/p/3480780.html
Copyright © 2020-2023  润新知