/// <summary>クローンの作製</summary> /// <returns>クローン</returns> public override object Clone() { // base.Cloneの後に、 WinCustomTextBoxDgvCol col = (WinCustomTextBoxDgvCol)base.Clone(); // 追加したプロパティをコピー // チェック系は不要、編集系を設定 col.MaxLength = this.MaxLength; col.IsNumeric = this.IsNumeric; col.EditInitialValue = this.EditInitialValue; //col.EditAddFigure = this.EditAddFigure; col.EditPadding = this.EditPadding; //col.EditDigitsAfterDP = this.EditDigitsAfterDP; col.EditDigitsAfterDP_Editing = this.EditDigitsAfterDP_Editing; //col.DisplayUnits = this.DisplayUnits; return(col); }
///// <summary>DataGridViewTextBoxCell.InitializeEditingControl経由のset_Textを無視するための関数</summary> //private void _83B12F0F_CEA3_4f93_9233_B86EFA149BB2( // int rowIndex, object initialFormattedValue, // DataGridViewCellStyle dataGridViewCellStyle) //{ // // ベースへ // base.InitializeEditingControl(rowIndex, // initialFormattedValue, dataGridViewCellStyle); //} /// <summary>編集コントロールを初期化</summary> /// <param name="rowIndex">行</param> /// <param name="initialFormattedValue">フォーマットバリュー</param> /// <param name="dataGridViewCellStyle">セル スタイル</param> public override void InitializeEditingControl( int rowIndex, object initialFormattedValue, DataGridViewCellStyle dataGridViewCellStyle) { //// DataGridViewTextBoxCell.InitializeEditingControlを呼び出す。 //this._83B12F0F_CEA3_4f93_9233_B86EFA149BB2( // rowIndex, initialFormattedValue, dataGridViewCellStyle); // ベースへ base.InitializeEditingControl(rowIndex, initialFormattedValue, dataGridViewCellStyle); // 編集コントロールであるWinCustomTextBoxDgvHostの取得 WinCustomTextBoxDgvHost winCustomTextBoxDgvHost = this.DataGridView.EditingControl as WinCustomTextBoxDgvHost; // 編集コントロールであるWinCustomTextBoxDgvHostが取得できた場合 if (winCustomTextBoxDgvHost != null) { // カスタム列のプロパティを反映させる WinCustomTextBoxDgvCol column = this.OwningColumn as WinCustomTextBoxDgvCol; // プロパティの移植 if (column != null) { // 追加したプロパティをコピー // チェック系は不要、編集系を設定 winCustomTextBoxDgvHost.MaxLength = column.MaxLength; winCustomTextBoxDgvHost.IsNumeric = column.IsNumeric; winCustomTextBoxDgvHost.EditInitialValue = column.EditInitialValue; //winCustomTextBoxDgvHost.EditAddFigure = column.EditAddFigure; winCustomTextBoxDgvHost.EditPadding = column.EditPadding; //winCustomTextBoxDgvHost.EditDigitsAfterDP = column.EditDigitsAfterDP; winCustomTextBoxDgvHost.EditDigitsAfterDP_Editing = column.EditDigitsAfterDP_Editing; //winCustomTextBoxDgvHost.DisplayUnits = column.DisplayUnits; } //try //{ // Textを設定(3項演算) //System.Diagnostics.Debug.WriteLine("InitializeEditingControl"); //System.Diagnostics.Debug.WriteLine("・this.RowIndex:" + this.RowIndex.ToString()); // DataGridView で DateTimePicker をホストすると ArgumentOutOfException が発生する //http://social.msdn.microsoft.com/Forums/ja-JP/7079fb1c-d171-44f8-81b1-751f3fe1ba6f/datagridview-datetimepicker-argumentoutofexception- //winCustomTextBoxDgvHost.Text = // this.Value == null ? "" : this.Value.ToString(); winCustomTextBoxDgvHost.Text = this.GetValue(rowIndex) == null ? "" : this.GetValue(rowIndex).ToString(); //} //catch (ArgumentOutOfRangeException aoorEx) //{ // // この例外は潰す。 //} //// バインド先を変更 //if (winCustomTextBoxDgvHost.DisplayUnits == null) //{ // // Textを設定(3項演算) // winCustomTextBoxDgvHost.Text = // this.Value == null ? "" : this.Value.ToString(); //} //else //{ // // Valueを設定 // winCustomTextBoxDgvHost.Value = this.Value; //} } }
/// <summary>ロード</summary> private void Form1_Load(object sender, EventArgs e) { // ハンドラ this.winCustomTextBox8.ValueChanged += new EventHandler(winCustomTextBox8_ValueChanged); //////////////////////////////////////////////////////////////////////////////////////////////////// // コンボ初期化 //////////////////////////////////////////////////////////////////////////////////////////////////// // Webサービスでマスタをロード ArrayList al = null; CmnMasterDatasForList.ClearMasterData(); al = new ArrayList(); al.Add(new ListItem("1", "aaa")); al.Add(new ListItem("2", "bbb")); al.Add(new ListItem("3", "ccc")); CmnMasterDatasForList.SetMasterData("Test1", al); al = new ArrayList(); al.Add(new ListItem("1", "AAA")); al.Add(new ListItem("2", "BBB")); al.Add(new ListItem("3", "CCC")); CmnMasterDatasForList.SetMasterData("Test2", al); al = new ArrayList(); al.Add(new ListItem("1", "あ")); al.Add(new ListItem("2", "い")); al.Add(new ListItem("3", "う")); CmnMasterDatasForList.SetMasterData("Test3", al); //// InitItemsで初期化 //this.winCustomDropDownList1.InitItems(); //this.winCustomDropDownList2.InitItems(); //this.winCustomDropDownList3.InitItems(); // InitDataSourceで初期化 this.winCustomDropDownList1.InitDataSource(); this.winCustomDropDownList2.InitDataSource(); this.winCustomDropDownList3.InitDataSource(); //////////////////////////////////////////////////////////////////////////////////////////////////// // データバインディングをテストする。 //////////////////////////////////////////////////////////////////////////////////////////////////// // DataBindingsのFormatString(桁区切り)はdecimalで無いと効かない。 // また、DataBindingsでは初期設定時のTextのReEditも効かない。 // 従って、DataBindings時の方式としてはdecimal&FormatStringに寄せる必要がある。 //////////////////////////////////////////////////////////////////////////////////////////////////// // 単項目の入力コントロールとのデータバインディングをテストする。 //////////////////////////////////////////////////////////////////////////////////////////////////// DataView dv = null; this.Dt = this.CreateDataTable(); // FormatStringとは相性が悪いので併用NGとした。 // 設定なし dv = new DataView(this.Dt, "id = 1", "", DataViewRowState.Unchanged); this.winCustomTextBox1.DataBindings.Add("Text", dv, "aaa", true, DataSourceUpdateMode.OnPropertyChanged, "hogehoge");//, "#,##0.########"); // 桁区切り3 dv = new DataView(this.Dt, "id = 2", "", DataViewRowState.Unchanged); this.winCustomTextBox2.DataBindings.Add("Text", dv, "aaa", true, DataSourceUpdateMode.OnPropertyChanged, null);//, "#,##0.########"); // 桁区切り4 dv = new DataView(this.Dt, "id = 3", "", DataViewRowState.Unchanged); this.winCustomTextBox3.DataBindings.Add("Text", dv, "aaa", true, DataSourceUpdateMode.OnPropertyChanged, null);//, "#,##0.########"); // 小数点以下2, 6 dv = new DataView(this.Dt, "id = 4", "", DataViewRowState.Unchanged); this.winCustomTextBox4.DataBindings.Add("Text", dv, "aaa", true, DataSourceUpdateMode.OnPropertyChanged, null);//, "#,##0.########"); // 小数点以下4, 8 dv = new DataView(this.Dt, "id = 5", "", DataViewRowState.Unchanged); this.winCustomTextBox5.DataBindings.Add("Text", dv, "aaa", true, DataSourceUpdateMode.OnPropertyChanged, null);//, "#,##0.########"); // パッド dv = new DataView(this.Dt, "id = 6", "", DataViewRowState.Unchanged); this.winCustomTextBox6.DataBindings.Add("Text", dv, "aaa", true, DataSourceUpdateMode.OnPropertyChanged, null);//, "#,##0.########"); // パッド dv = new DataView(this.Dt, "id = 7", "", DataViewRowState.Unchanged); this.winCustomTextBox7.DataBindings.Add("Text", dv, "aaa", true, DataSourceUpdateMode.OnPropertyChanged, null);//, "#,##0.########"); //--- this.BindingSource1 = new BindingSource(); this.BindingSource1.DataSource = new Bean(88888888, DateTime.Now, "88888888"); // 複合(桁区切り3+小数点以下2、6+単位変換100万→10^6乗) //dv = new DataView(this.Dt, "id = 8", "", DataViewRowState.Unchanged); //this.winCustomTextBox8.DataBindings.Add("Value", dv, "aaa", true, DataSourceUpdateMode.OnPropertyChanged, null);//, "#,##0.########"); this.winCustomTextBox8.DataBindings.Add("Value", this.BindingSource1, "AAA", true, DataSourceUpdateMode.OnPropertyChanged, null);//, "#,##0.########"); // Textはdatetime、Text2はstringとのバインディングもテスト(日付) //dv = new DataView(this.Dt, "id = 1", "", DataViewRowState.Unchanged); //this.winCustomTextBox8.DataBindings.Add("Text2", dv, "bbb", true, DataSourceUpdateMode.OnPropertyChanged, null);//, "#,##0.########"); this.winCustomMaskedTextBox9.DataBindings.Add("Text2", this.BindingSource1, "BBB", true, DataSourceUpdateMode.OnPropertyChanged, null);//, "yyyy/MM/dd"); //////////////////////////////////////////////////////////////////////////////////////////////////// // データグリッドとのデータバインディングをテストする。 //////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////// // WinCustomTextBoxの場合 ////////////////////////////////////////////////// // WinCustomTextBoxDgvColを作成 WinCustomTextBoxDgvCol nomalColumn = new WinCustomTextBoxDgvCol(); nomalColumn.MaxLength = 15; nomalColumn.IsNumeric = true; // EditInitialValue //nomalColumn.EditInitialValue = EditInitialValue.Zero; // 編集中、小数点以下(Editingのみ実装) nomalColumn.EditDigitsAfterDP_Editing= new EditDigitsAfterDP(CutMethod.Ceiling, 6); // パッド //nomalColumn.EditPadding = new EditPadding(PadDirection.Right, '0'); //nomalColumn.EditPadding = new EditPadding(PadDirection.Left, '0'); // 桁区切り(FormatStringで対応) // DisplayUnits(処理で対応) nomalColumn.DataPropertyName = "aaa"; nomalColumn.HeaderText = "aaa"; // FormatString(編集後、カンマ区切りで小数点2桁) nomalColumn.DefaultCellStyle.Format = "#,##0.##"; this.dataGridView1.Columns.Add(nomalColumn); ////////////////////////////////////////////////// // WinCustomMaskedTextBoxの場合 ////////////////////////////////////////////////// // WinCustomMaskedTextBoxDgvColを作成 WinCustomMaskedTextBoxDgvCol maskedColumn = new WinCustomMaskedTextBoxDgvCol(); maskedColumn.DataPropertyName = "bbb"; maskedColumn.HeaderText = "bbb"; // Maskと、Mask_Editingを逆にすると上手くいかない。 // 初期表示時と、編集後で、セル(バインド先)のFormatが変わってしまうため。 maskedColumn.EditInitialValue = EditInitialValue.Blank; maskedColumn.Mask = "9999/99/99"; maskedColumn.Mask_Editing = "9999年99月99日"; maskedColumn.EditToHankaku = true; maskedColumn.EditToYYYYMMDD = true; // FormatString(編集後、カンマ区切りで小数点2桁) maskedColumn.DefaultCellStyle.Format = "yyyy/MM/dd"; this.dataGridView1.Columns.Add(maskedColumn); ////////////////////////////////////////////////// // WinCustomDropDownListの場合 ////////////////////////////////////////////////// // WinCustomDropDownListDgvColを作成 DataGridViewComboBoxColumn comboColumn = new DataGridViewComboBoxColumn(); comboColumn.DataPropertyName = "ccc"; comboColumn.HeaderText = "ccc"; comboColumn.DataSource = CmnMasterDatasForList.GetMasterData("Test1"); // ↓どちらでも良い //MasterDatasForList.GetMasterData("Test1", comboColumn.Items); // ↑どちらでも良い comboColumn.ValueMember = "ID"; // 必須 comboColumn.DisplayMember = "Name"; // 必須 this.dataGridView1.Columns.Add(comboColumn); // --- // また、DataBindingsでは初期設定時のTextのReEditも効かない。 // 従って、DataBindings時の方式としてはdecimal&FormatStringに寄せる必要がある。 this.dataGridView1.DataSource = this.CreateDataTable(); this.dataGridView1.Columns["id"].Visible = false; this.dataGridView1.Columns["ddd"].Visible = false; // 変更通知を発生させる用途の列。 }