C# 時刻入力時、:を省いて入力する
DataGridViewでDBのフィールドへ時刻データを大量に「手入力で」入力する必要に迫られたとき
たとえば"12:34:56"のように入力していて「テンキーだけで入力したい!」と思ったことありませんか?
上記の例だとつまり "123456" と、:(コロン)入力を省いて結果は "12:34:56" と入力したいというわがままです。
そんな要望を満たしてくれたのがこのコード。(ネタ元:MSDN Visual C# フォーラム)
/* その1.ParseExactを使う例 */ private void dataGridViewRecords_CellParsing(object sender, DataGridViewCellParsingEventArgs e) { if (this.dataGridViewRecords.Columns[e.ColumnIndex].Name == "results") { if (e != null) { if (e.Value != null) { try { string value = e.Value.ToString(); e.Value = DateTime.ParseExact(value, "HHmmss", null); e.ParsingApplied = true; } catch (FormatException) { e.ParsingApplied = false; } } } } } private void dataGridViewRecords_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) { if (this.dataGridViewRecords.Columns[e.ColumnIndex].Name == "results") { if (e.Value != null) { e.Value = ((DateTime)e.Value).ToString("HH:mm:ss"); } } }
/* その2.Insertを使う例 */ private void dataGridViewRecords_CellParsing(object sender, DataGridViewCellParsingEventArgs e) { if (this.dataGridViewRecords.Columns[e.ColumnIndex].Name == "results") { if (e != null) { if (e.Value != null) { try { string value = e.Value.ToString(); value = value.Insert(2, ":"); value = value.Insert(5, ":"); e.Value = DateTime.Parse(value); e.ParsingApplied = true; } catch (FormatException) { e.ParsingApplied = false; } } } } } private void dataGridViewRecords_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) { if (this.dataGridViewRecords.Columns[e.ColumnIndex].Name == "results") { if (e.Value != null) { e.Value = ((DateTime)e.Value).ToString("HH:mm:ss"); } } }