Ejemplo n.º 1
0
        /// <summary>編集コントロールを初期化</summary>
        /// <param name="rowIndex">行</param>
        /// <param name="initialFormattedValue">フォーマットバリュー</param>
        /// <param name="dataGridViewCellStyle">セル スタイル</param>
        public override void InitializeEditingControl(
            int rowIndex, object initialFormattedValue,
            DataGridViewCellStyle dataGridViewCellStyle)
        {
            //System.Diagnostics.Debug.WriteLine("InitializeEditingControl");
            //System.Diagnostics.Debug.WriteLine("・rowIndex:" + rowIndex);

            // ベースへ。
            base.InitializeEditingControl(rowIndex,
                                          initialFormattedValue, dataGridViewCellStyle);

            // 編集コントロールであるWinCustomMaskedTextBoxDgvHostの取得
            WinCustomMaskedTextBoxDgvHost winCustomMaskedTextBoxDgvHost =
                this.DataGridView.EditingControl as WinCustomMaskedTextBoxDgvHost;

            // 編集コントロールであるWinCustomMaskedTextBoxDgvHostが取得できた場合
            if (winCustomMaskedTextBoxDgvHost != null)
            {
                // カスタム列のプロパティを反映させる
                WinCustomMaskedTextBoxDgvCol column =
                    this.OwningColumn as WinCustomMaskedTextBoxDgvCol;

                // プロパティの移植
                if (column != null)
                {
                    // 追加したプロパティをコピー
                    // チェック系は不要、編集系を設定
                    winCustomMaskedTextBoxDgvHost.EditInitialValue = column.EditInitialValue;

                    winCustomMaskedTextBoxDgvHost.Mask         = column.Mask;
                    winCustomMaskedTextBoxDgvHost.Mask_Editing = column.Mask_Editing;

                    winCustomMaskedTextBoxDgvHost.EditToHankaku  = column.EditToHankaku;
                    winCustomMaskedTextBoxDgvHost.EditToYYYYMMDD = column.EditToYYYYMMDD;
                }

                //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-

                //winCustomMaskedTextBoxDgvHost.Text =
                //    this.Value == null ? "" : this.Value.ToString();

                winCustomMaskedTextBoxDgvHost.Text =
                    this.GetValue(rowIndex) == null ? "" : this.GetValue(rowIndex).ToString();

                //}
                //catch (ArgumentOutOfRangeException aoorEx)
                //{
                //    // この例外は潰す。
                //}
            }
        }
        /// <summary>クローンの作製</summary>
        /// <returns>クローン</returns>
        public override object Clone()
        {
            // base.Cloneの後に、
            WinCustomMaskedTextBoxDgvCol col =
                (WinCustomMaskedTextBoxDgvCol)base.Clone();

            // 追加したプロパティをコピー
            // チェック系は不要、編集系を設定
            col.EditInitialValue = this.EditInitialValue;

            col.Mask         = this.Mask;
            col.Mask_Editing = this.Mask_Editing;

            col.EditToHankaku  = this.EditToHankaku;
            col.EditToYYYYMMDD = this.EditToYYYYMMDD;

            return(col);
        }
Ejemplo n.º 3
0
        /// <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; // 変更通知を発生させる用途の列。
        }