积极答复者
如何给自定义的DataGridViewTextBoxColumn类加属性。。。。。。。。。。。。。。。。。。。。。

问题
答案
-
知道原因了,cell的属性其实是由column clone过去的
要在column中的clone中实现一下
public partial class ComTextBoxColumn : DataGridViewTextBoxColumn
{
public ComTextBoxColumn()
{
InitializeComponent();//セルのテンプレートを最新に設置する
this.CellTemplate = new ComTextBoxCell(typeFlg);}
#region コントロールのタイプ
// コントロールのタイプ用
private EnumDefine.textType typeFlg;// 必入力チェック用
private bool required;/// <summary>
/// コントロールのタイプ
/// </summary>
public EnumDefine.textType TypeFlg
{
get
{
return this.typeFlg;
}
set
{
this.typeFlg = value;
}
}/// <summary>
/// 必入力チェック
/// </summary>
public bool Required
{
get
{
return this.required;
}
set
{
this.required = value;
}
}/// <summary>
/// 複製された System.Windows.Forms.DataGridViewBand
/// </summary>
/// <returns></returns>
public override object Clone()
{
ComTextBoxColumn col = (ComTextBoxColumn)base.Clone();((ComTextBoxCell)col.CellTemplate).Required = required;
((ComTextBoxCell)col.CellTemplate).TypeFlg = typeFlg;
col.Required = required;
col.TypeFlg = typeFlg;
return col;
}#endregion
}public partial class ComTextBoxCell : DataGridViewTextBoxCell
{
public ComTextBoxCell()
{
InitializeComponent();
}public ComTextBoxCell(EnumDefine.textType type)
{
this.typeFlg = type;InitializeComponent();
}#region 内部変数
// コントロールのタイプ用
private EnumDefine.textType typeFlg = EnumDefine.textType.Default;// 必入力チェック用
private bool required;// エラーのフラグ
private bool errorFlg;#endregion
#region コントロールのタイプ
/// <summary>
/// コントロールのタイプ
/// </summary>
public EnumDefine.textType TypeFlg
{
get
{
return typeFlg;
}
set
{
typeFlg = value;
}
}/// <summary>
/// コントロールのタイプ
/// </summary>
public bool ErrorFlg
{
get
{
return errorFlg;
}
set
{
errorFlg = value;
}
}/// <summary>
/// 必入力チェック
/// </summary>
public bool Required
{
get
{
return required;
}
set
{
required = value;
}
}/// <summary>
/// 対象のセルの同一コピーを作成します。
/// </summary>
/// <returns></returns>
public override object Clone()
{
ComTextBoxCell col = (ComTextBoxCell)base.Clone();
col.Required = required;
col.TypeFlg = typeFlg;
col.ErrorFlg = errorFlg;
return col;
}
public override object ParseFormattedValue(object formattedValue, DataGridViewCellStyle cellStyle, TypeConverter formattedValueTypeConverter, TypeConverter valueTypeConverter)
{
try
{
switch (typeFlg)
{
// 時間の場合
case EnumDefine.textType.Date:
return ClsFormat.formatDateYYYYMMDD(ClsFormat.unformatDate(formattedValue.ToString()));
// 数字の場合
case EnumDefine.textType.Number:
return ClsFormat.formatViewNumber(formattedValue.ToString(), cellStyle.Format);
//年月yyyy/MM
case EnumDefine.textType.YM:
return ClsFormat.formatDateYYYYMM(formattedValue.ToString());
//年yyyy
case EnumDefine.textType.YYYY:
break;
//時間HH:mm:ssの場合
case EnumDefine.textType.HHMMSS:
break;//時分HH:mmの場合
case EnumDefine.textType.HHMM:break;
default:
break;
}return formattedValue;
}
catch
{
//何もしなくてもいい。
}
return base.ParseFormattedValue(formattedValue, cellStyle, formattedValueTypeConverter, valueTypeConverter);}
#endregion
}- 已标记为答案 Mio_MiaoModerator 2010年12月20日 8:02
全部回复
-
dear
你有设定[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]吗?
[User Control] 自訂控制項的集合屬性 /User Control of Collection Properties
http://www.dotblogs.com.tw/yc421206/archive/2010/06/30/16284.aspx
秘訣無它,唯勤而已 http://www.dotblogs.com.tw/yc421206/
我在设计时,可以看到,就是设置无果 -
知道原因了,cell的属性其实是由column clone过去的
要在column中的clone中实现一下
public partial class ComTextBoxColumn : DataGridViewTextBoxColumn
{
public ComTextBoxColumn()
{
InitializeComponent();//セルのテンプレートを最新に設置する
this.CellTemplate = new ComTextBoxCell(typeFlg);}
#region コントロールのタイプ
// コントロールのタイプ用
private EnumDefine.textType typeFlg;// 必入力チェック用
private bool required;/// <summary>
/// コントロールのタイプ
/// </summary>
public EnumDefine.textType TypeFlg
{
get
{
return this.typeFlg;
}
set
{
this.typeFlg = value;
}
}/// <summary>
/// 必入力チェック
/// </summary>
public bool Required
{
get
{
return this.required;
}
set
{
this.required = value;
}
}/// <summary>
/// 複製された System.Windows.Forms.DataGridViewBand
/// </summary>
/// <returns></returns>
public override object Clone()
{
ComTextBoxColumn col = (ComTextBoxColumn)base.Clone();((ComTextBoxCell)col.CellTemplate).Required = required;
((ComTextBoxCell)col.CellTemplate).TypeFlg = typeFlg;
col.Required = required;
col.TypeFlg = typeFlg;
return col;
}#endregion
}public partial class ComTextBoxCell : DataGridViewTextBoxCell
{
public ComTextBoxCell()
{
InitializeComponent();
}public ComTextBoxCell(EnumDefine.textType type)
{
this.typeFlg = type;InitializeComponent();
}#region 内部変数
// コントロールのタイプ用
private EnumDefine.textType typeFlg = EnumDefine.textType.Default;// 必入力チェック用
private bool required;// エラーのフラグ
private bool errorFlg;#endregion
#region コントロールのタイプ
/// <summary>
/// コントロールのタイプ
/// </summary>
public EnumDefine.textType TypeFlg
{
get
{
return typeFlg;
}
set
{
typeFlg = value;
}
}/// <summary>
/// コントロールのタイプ
/// </summary>
public bool ErrorFlg
{
get
{
return errorFlg;
}
set
{
errorFlg = value;
}
}/// <summary>
/// 必入力チェック
/// </summary>
public bool Required
{
get
{
return required;
}
set
{
required = value;
}
}/// <summary>
/// 対象のセルの同一コピーを作成します。
/// </summary>
/// <returns></returns>
public override object Clone()
{
ComTextBoxCell col = (ComTextBoxCell)base.Clone();
col.Required = required;
col.TypeFlg = typeFlg;
col.ErrorFlg = errorFlg;
return col;
}
public override object ParseFormattedValue(object formattedValue, DataGridViewCellStyle cellStyle, TypeConverter formattedValueTypeConverter, TypeConverter valueTypeConverter)
{
try
{
switch (typeFlg)
{
// 時間の場合
case EnumDefine.textType.Date:
return ClsFormat.formatDateYYYYMMDD(ClsFormat.unformatDate(formattedValue.ToString()));
// 数字の場合
case EnumDefine.textType.Number:
return ClsFormat.formatViewNumber(formattedValue.ToString(), cellStyle.Format);
//年月yyyy/MM
case EnumDefine.textType.YM:
return ClsFormat.formatDateYYYYMM(formattedValue.ToString());
//年yyyy
case EnumDefine.textType.YYYY:
break;
//時間HH:mm:ssの場合
case EnumDefine.textType.HHMMSS:
break;//時分HH:mmの場合
case EnumDefine.textType.HHMM:break;
default:
break;
}return formattedValue;
}
catch
{
//何もしなくてもいい。
}
return base.ParseFormattedValue(formattedValue, cellStyle, formattedValueTypeConverter, valueTypeConverter);}
#endregion
}- 已标记为答案 Mio_MiaoModerator 2010年12月20日 8:02