WinForm中DataGridView的单元格的显示格式DefaultCellStyle.Format自定义DefaultCellStyle.FormatProvider设置

第一步:继承ICustomFormatter, IFormatProvider接口,并实现

实例代码:

ICustomFormatter, IFormatProvider接口实现类
    public class KmFormatProvider : ICustomFormatter, IFormatProvider
    {
        public object GetFormat(Type formatType)
        {
            if (formatType == typeof(ICustomFormatter))
            {
                return this;
            }
            else return null;

            throw new NotImplementedException();
        }
        public string Format(string format, object arg, IFormatProvider formatProvider)
        {
            //兜底处理
            if (format == null)
            {
                if (arg is IFormattable)
                    return ((IFormattable)arg).ToString(format, formatProvider);
                return arg.ToString();
            }
            else
            {
                if (format == "KM")
                {
                    //此处编写自己需要的字符串格式转化方法
                    return BSConvert.DoubleToKmString(BSConvert.ToDouble(arg));
                }
                else //兜底处理
                {
                    if (arg is IFormattable)
                        return ((IFormattable)arg).ToString(format, formatProvider);
                    return arg.ToString();
                }
            }
        }
    }

第二步:界面初始化Load事件中获取DataGridView表头列DataGridViewTextBoxColumn,设置并帮定FormatProvider接口

绑定自定格式接口
        private void InsSubstructureForm_Load(object sender, EventArgs e)
        {
            //桩号格式化显示
            DataGridViewColumn dataGridViewColumn = this.DGV_InsSubstructureList.Columns["mileagemark"];
            DataGridViewTextBoxColumn gridViewTextBoxColumn = dataGridViewColumn as DataGridViewTextBoxColumn;
            if (!gridViewTextBoxColumn.HasDefaultCellStyle)
                gridViewTextBoxColumn.DefaultCellStyle = new System.Windows.Forms.DataGridViewCellStyle();
            gridViewTextBoxColumn.DefaultCellStyle.FormatProvider = new KmFormatProvider();
            gridViewTextBoxColumn.DefaultCellStyle.Format = "KM";
        }

第三步:添加并处理DataGridView的CellFormatting事件

处理CellFormatting事件
        private void DGV_InsSubstructureList_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
        {
            var formatter = e.CellStyle.FormatProvider as ICustomFormatter;
            if (formatter != null)
            {
                e.Value = formatter.Format(e.CellStyle.Format, e.Value, e.CellStyle.FormatProvider);
                e.FormattingApplied = true;
            }
        }

第四步:运行预览效果

image

posted @ 2023-02-24 17:20  百年一梦  阅读(700)  评论(0编辑  收藏  举报