在线等待:自定义DataGridViewColumn控件中自定义属性值无法保存的问题?
运行环境:WindowsXp(SP3)+ Vs.Net2008企业版
麻烦各位帮忙看一下
我用了三种方法写了三个控件,都是在点击确定后没有保存最新值,具体代码如下:
一、三个控件代码
1.DataGridViewCustom1
using System;
using System.ComponentModel;
using System.Windows.Forms;
public class DataGridViewCustomColumn_1 : DataGridViewColumn
{
private int m_decimalPlace;
/// <summary>
/// 小数位数
/// </summary>
[Description("小数位数"), Browsable(true), Category("财务显示单元格")]
public int DecimalPlace
{
get { return m_decimalPlace != 0 ? m_decimalPlace : 2; }
set
{
if (m_decimalPlace != value)
{
if (value < 0)
throw new Exception("《小数位数》不可以小于 0 !");
else
{
this.m_decimalPlace = value;
}
}
}
}
public DataGridViewCustomColumn_1()
: base(new DataGridViewCustomCell_1())
{
}
}
public class DataGridViewCustomCell_1 : DataGridViewTextBoxCell
{
}2.DataGridViewCustom2
using System;
using System.ComponentModel;
using System.Windows.Forms;
public class DataGridViewCustomColumn_2 : DataGridViewColumn
{
private int m_decimalPlace;
/// <summary>
/// 小数位数
/// </summary>
[Description("小数位数"), Browsable(true), Category("财务显示单元格")]
public int DecimalPlace
{
get { return m_decimalPlace != 0 ? m_decimalPlace : 2; }
set
{
if (m_decimalPlace != value)
{
if (value < 0)
throw new Exception("《小数位数》不可以小于 0 !");
else
{
this.m_decimalPlace = value;
DataGridViewCustomCell_2 customCell = (DataGridViewCustomCell_2)this.CellTemplate;
customCell.DecimalPlace = value;
}
}
}
}
public DataGridViewCustomColumn_2()
: base(new DataGridViewCustomCell_2())
{
}
}
public class DataGridViewCustomCell_2 : DataGridViewTextBoxCell
{
private int m_decimalPlace;
/// <summary>
/// 小数位数
/// </summary>
public int DecimalPlace
{
get { return m_decimalPlace; }
set
{
if (m_decimalPlace != value)
{
if (value < 0)
throw new Exception("《小数位数》不可以小于 0 !");
else
m_decimalPlace = value;
}
}
}
}3.DataGridViewCustom3
using System;
using System.ComponentModel;
using System.Windows.Forms;
public class DataGridViewCustomColumn_3 : DataGridViewColumn
{
private int m_decimalPlace;
/// <summary>
/// 小数位数
/// </summary>
[Description("小数位数"), Browsable(true), Category("财务显示单元格")]
public int DecimalPlace
{
get { return m_decimalPlace != 0 ? m_decimalPlace : 2; }
set
{
if (m_decimalPlace != value)
{
if (value < 0)
throw new Exception("《小数位数》不可以小于 0 !");
else
{
this.m_decimalPlace = value;
DataGridViewCustomCell_3 customCell = (DataGridViewCustomCell_3)this.CellTemplate;
customCell.DecimalPlace = value;
if (this.DataGridView != null && this.DataGridView.Rows != null)
{
int rowCount = this.DataGridView.Rows.Count;
for (int x = 0; x < rowCount; x++)
{
foreach (DataGridViewCell dgvCell in this.DataGridView.Rows.SharedRow(x).Cells)
{
if (dgvCell is DataGridViewCustomCell_3)
(dgvCell as DataGridViewCustomCell_3).DecimalPlace = value;
}
}
}
}
}
}
}
public DataGridViewCustomColumn_3()
: base(new DataGridViewCustomCell_3())
{
}
}
public class DataGridViewCustomCell_3 : DataGridViewTextBoxCell
{
private int m_decimalPlace;
/// <summary>
/// 小数位数
/// </summary>
public int DecimalPlace
{
get
{
DataGridViewCustomColumn_3 customColumn = OwningColumn as DataGridViewCustomColumn_3;
if (customColumn != null)
{
if (customColumn.DecimalPlace != 0)
{
return customColumn.DecimalPlace;
}
}
return m_decimalPlace;
}
set
{
if (m_decimalPlace != value)
{
if (value < 0)
throw new Exception("《小数位数》不可以小于 0 !");
else
m_decimalPlace = value;
}
}
}
}相关推荐
C#自定义DataGridViewColumn显示TreeView
我们可以自定义DataGridView的DataGridViewColumn来实现自定义的列,下面介绍一下如何通过扩展DataGridViewColumn来实现一个TreeViewColumn
WinForms DataGridView自定义NumericUpDown列:从原理到实现
在桌面应用开发中,表格数据录入与校验始终是高频需求。WinForms的DataGridView作为最常用的数据网格控件,提供了灵活的扩展机制,允许开发者通过自定义单元格类型来满足复杂业务场景。其核心原理在于单元格的EditType属性与IDataGridViewEditingControl接口,通过实现这一接口,可以无缝接入任何自定义编辑控件。本文将深入剖析DataGridView编辑控件挂载机制,并给出一个完整的自定义NumericUpDown列实现,解决数字输入中的非法字符、微调体验与数据格式统一问题。
DataGridView内嵌NumericUpDown:单元格数字微调控件的完整实现
在桌面应用开发中,数据录入是与用户体验直接相关的环节。为了确保输入数据的有效性和规范性,开发者通常需要对表格单元格进行精确控制。DataGridView作为WinForms中常用的数据展示与编辑控件,其默认编辑能力有限,难以满足对数值范围、精度和操作效率的要求。通过自定义单元格编辑控件,将NumericUpDown无缝嵌入DataGridView,既能保留表格的整体交互,又能提供微调、限定范围、快速输入等能力。这种模式不仅适用于参数配置、订单管理等典型业务场景,也为扩展其他编辑控件提供了可借鉴的思路。核心实
C# Winform DataGridView列类型详解:从基础到高级应用
在C# Winform桌面应用开发中,数据展示与交互是核心需求之一。其原理在于通过控件将数据模型与用户界面进行绑定,实现高效的数据呈现与编辑。DataGridView作为Winform开发中的关键控件,其技术价值在于提供了丰富、语义化的列类型,能够针对不同数据类型和交互场景进行优化,从而显著提升开发效率和用户体验。例如,DataGridViewCheckBoxColumn专为布尔值设计,自动渲染为复选框,简化了状态切换操作;DataGridViewComboBoxColumn则通过下拉列表规范输入,常用于枚
C#DataGridView自定义控件的列,提供源代码!
提供源代码!自定义 Windows 窗体 DataGridView 控件 现有的几种嵌套控件,但无时间控件类型,下载代码中就是嵌套了时间控件类。 System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms.DataGridViewComboBoxColumn, System.Windows.Forms.DataGridViewCheckBoxColumn, DataGridView 控件提供了多个可用来调整其单元格、行和列的外观和基本行为(外观和感受)的属性。但是,如果您有超出 DataGridViewCellStyle 类的功能之外的特殊需求,还可以实现控件的所有者描述,或者通过创建自定义单元格、列和行来扩展其功能。 若要自己绘制单元格和行,可以对各种 DataGridView 绘制事件进行处理。若要修改现有功能或提供新的功能,可以创建自己的从现有的 DataGridViewCell、DataGridViewColumn 和 DataGridViewRow 类型派生的类型。还可以通过创建派生类型来提供新的编辑功能,当单元格处于编辑模式时,该派生类型可以显示所选择的控件。


