C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: DataGridViewのセルの編集書式と表示書式


(過去ログ 118 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■69177 / inTopicNo.1)  DataGridViewのセルの編集書式と表示書式
  
□投稿者/ Yuzutosan (1回)-(2013/12/08(Sun) 17:33:37)

分類:[.NET 全般] 

いつも参考にさせていただいています。今回はじめて質問いたします。
 DatatableをDataSourceにしたDataGridViewがあります。このDatatableにDatetime型のColumnがあり、DataGridViewにこのColumnに対応した列があります。名称を仮に「日付」とします。「日付」列のセルのデータを表示しているときの書式は"yyyy/MM/dd"とし、フォーカスがあたって編集モードになっているときは"yyyyMMdd"となるようにしたい(つまり、表示:2013/12/08、編集時:20131208の感じです)のですが、どのようにしたらいいでしょうか。
 表示書式は列のDefaultCellStyle.FormatプロパティやDataGridViewのDataGridViewイベントで設定できるのですが、編集時の書式をCellBeginEditイベントで設定しようとしてもうまくいきません。
 どなたかお分かりでしたらよろしくお願いします。
引用返信 編集キー/
■69188 / inTopicNo.2)  Re[1]: DataGridViewのセルの編集書式と表示書式
□投稿者/ ぽん (8回)-(2013/12/09(Mon) 11:45:20)
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("/", "");
}
}



引用返信 編集キー/
■69302 / inTopicNo.3)  Re[2]: DataGridViewのセルの編集書式と表示書式
□投稿者/ Yuzutosan (3回)-(2013/12/15(Sun) 16:23:46)
No69188 (ぽん さん) に返信
> ■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("/", "");
> }
> }
>
>
>

返事が大変遅くなり申し訳ありません。
こちらの方法を参考にしてつくってみたところ、希望どおりのものができました。
ありがとうございました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -