没有找到合适的产品?
联系客服协助选型:023-68661681
提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
转帖|其它|编辑:郝浩|2008-11-27 10:45:04.000|阅读 3529 次
概述:定制DataGridView的数值编辑元素:Edit Control、Column与Cell
# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>
引言
本文将探讨在数值编辑应用中如何定义DataGridView的元素,如:编辑控件(Edit control)、表格列(Column)和单元格(Cell),从而具有如下功能:
背景
在数值编辑应用中已经有许多的定制表格列、单元格和表格的解决方案,经典的是Build a Custom NumericUpDown Cell and Column for the DataGridView Control(有笔者的翻译文章),该文深入、详细及分步骤地描述了DataGridView中的编辑控件、表格列与单元格的实现,其中的编辑控件基于标准的NumericUpDown,但却有如下一些不足:
许多的解决方案与上文类似,只处理键盘输入,较少支持鼠标上下文菜单中的剪切、复制、粘贴和删除操作,也较少处理快捷键如Strl+X、Ctrl+C和Ctrl+V的操作。
主要步骤
本文根据Build a Custom NumericUpDown Cell and Column for the DataGridView Control(译文), 并使用笔者自己的开源倥件TNumEditBox作为编辑控件,定制编辑控件、表格列和单元格。其中的核心实现是,必须基于TNumEditBox创建编辑控件,然后定制DataGridView的表格列和单元格。主要步骤包括:
事实上,上面引用的文章已经详细讨论了这些步骤和实现,但我们不必完全按照其它们的做法,因为我们使用TNumEditBox取代NumericUpDown作编辑控件,该控件与DataGridViewTextBoxEditingControl一样都派生自TextBox。当然,我们也不需要处理快捷键和上下文菜单,因为这些编辑操作由TNumEditBox完成。[SPAN]
关键点
我们指出一些与引用文不同的技术关键点。
1)重写TNumEditDataGridViewCell类的SetValue方法
当我们直接给DataGridView的单元格赋值时,如:dataGridView1.Rows[0].Cells[0].Value = 1,将调用SetValue方法。该方法自动推断获得的值类型,即是说,如果赋1认为是整数,赋1.1则认为是实数。这样,当给某DataGridView列赋值1与1.1时,该列将有整数和实数,此时点击列表头排序将抛出异常,因为我们没有实现整数与实数的IComparer接口。
由于DataGridViewTextBoxCell没有公开属性Value,我们只有重写SetValue方法:
protected override bool SetValue(int rowIndex, object value){
decimal val = 0.0m;
try
{
val = Math.Round(System.Convert.ToDecimal(value), m_decimalLength);
}
catch { }
return base.SetValue(rowIndex, val);
}
我们转换所有赋给单元格的值为decimal型。我们不需要当心重写方法的性能问题,因为只有直接给单元格赋值时才调用该方法,在编辑或绑定数据源时均不会调用它。
2)定义TNumEditDataGridViewCell类的ShowNullWhenZero属性
通常,DataGridView单元格值0时显示为0或 0.00等等,我们希望类似null时不显示该数值,特别是在DataGridView有许多0时的情况。这里,我们在TNumEditDataGridViewCell类中定义属性ShowNullWhenZero,要求与null一样处理0,于是我们重写GetFormattedValue方法:
protected override object GetFormattedValue(object value, int rowIndex,ref DataGridViewCellStyle cellStyle, TypeConverter valueTypeConverter,
TypeConverter formattedValueTypeConverter, DataGridViewDataErrorContexts context){
object baseFormattedValue = base.GetFormattedValue(value, rowIndex, ref cellStyle, valueTypeConverter, formattedValueTypeConverter, context);
string formattedText = baseFormattedValue as string;
if (value == null || string.IsNullOrEmpty(formattedText)) // behave like null
{
return baseFormattedValue;
}
Decimal unformattedDecimal = System.Convert.ToDecimal(value); // 123.1 to "123.1"
Decimal formattedDecimal = System.Convert.ToDecimal(formattedText); // 1.1 to "1.12" 如果DecimalLength=2
if (unformattedDecimal == 0.0m && m_showNullWhenZero)
{
return base.GetFormattedValue(null, rowIndex, ref cellStyle, valueTypeConverter, formattedValueTypeConverter, context);
}
if (unformattedDecimal == formattedDecimal)
{
return formattedDecimal.ToString("F" + m_decimalLength.ToString());
}
return formattedText;
}
使用源码
解包TNumEditDataGridViewElements.zip后,如果安装了VS2005/2008,我们可以双击解决方案文件TNumEditDataGridViewElements.sln浏览演示项目,或者运行子文件夹\bin\下的TNumEditDataGridViewEleentsDemo.exe观看与测试它们。下面是一些关于类文件和创建DataGridView表格列步骤的说明。[SPAN]
1)两个C#类文件
压缩包有两个C#类文件:
2)使用步骤
我们可以在应用项目中按如下步骤使用定制的表格元素:
好了,我们可以在应用中测试、运行与欣赏DataGridView定制元素了!
结论
在Windows Forms中,DataGridView是一个功能强大的数据显示与编辑控件,我们希望它有一个方便与标准的数值处理方式。通常,我们定制一个或多个DataGridView核心元素。在TNumEditBox基础上,根据Build a Custom NumericUpDown Cell and Column for the DataGridView Control给出的方法和步骤,我们提供了一个定制DataGridView元素的解决方案,包括:编辑控件、表格列和单元格。我们方案的关键特点是:支持鼠标上下文菜单操作及快捷键。欢迎任何评论和建议。
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com
文章转载自:CSDN面对“数字中国”建设和中国制造2025战略实施的机遇期,中车信息公司紧跟时代的步伐,以“集约化、专业化、标准化、精益化、一体化、平台化”为工作目标,大力推进信息服务、工业软件等核心产品及业务的发展。在慧都3D解决方案的实施下,清软英泰建成了多模型来源的综合轻量化显示平台、实现文件不失真的百倍压缩比、针对模型中的大模型文件,在展示平台上进行流畅展示,提升工作效率,优化了使用体验。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@evget.com
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢
慧都科技 版权所有 Copyright 2003-
2025 渝ICP备12000582号-13 渝公网安备
50010702500608号