|
■No69177 (Yuzutosan さん) に返信 > いつも参考にさせていただいています。今回はじめて質問いたします。 > DatatableをDataSourceにしたDataGridViewがあります。このDatatableにDatetime型のColumnがあり、DataGridViewにこのColumnに対応した列があります。名称を仮に「日付」とします。「日付」列のセルのデータを表示しているときの書式は"yyyy/MM/dd"とし、フォーカスがあたって編集モードになっているときは"yyyyMMdd"となるようにしたい(つまり、表示:2013/12/08、編集時:20131208の感じです)のですが、どのようにしたらいいでしょうか。
以下の方法でできると思います。 1,DataGridViewのEditingControlShowingに登録 2,DataGridViewEditingControlShowingEventArgsのe.ControlをTextBoxにキャスト 3,TextBox.Textから'/'を削除したものをTextBox.Textに戻す 4,DataGridViewのCellEndEditに登録 5,DataGridViewの修正終了Cell位置のValueに"/"を入れたものをCellのValueに戻す
バリデーションがあれば、3か5に入れるといいです。
例(テスト用)
this.dataGridView1.EditingControlShowing += dataGridView1_EditingControlShowing; this.dataGridView1.CellEndEdit += dataGridView1_CellEndEdit;
void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e) { string date = this.dataGridView1[e.ColumnIndex, e.RowIndex].Value.ToString();
date = date.Insert(date.Length - 4, "/"); date = date.Insert(date.Length - 2, "/");
this.dataGridView1[e.ColumnIndex, e.RowIndex].Value = date; }
void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) { TextBox box = e.Control as TextBox;
if (box != null) { string date = box.Text; box.Text = date.Replace("/", ""); } }
|