DOBON.NETプログラミング道掲示板
(現在 過去ログ1 を表示中)

[ 最新記事及び返信フォームをトピックトップへ ]

■33099 / inTopicNo.1)  DataGridViewに書式を設定した場合のセル編集時の表示を変えたい
  
□投稿者/ ねここねこ 一般人(3回)-(2015/09/18(Fri) 11:41:21)
  • アイコン環境/言語:[OS : Windows 7 / 言語 : Visual Basic .NET / .NET Framework : 4.6] 
    分類:[.NET] 

    2015/09/18(Fri) 11:44:09 編集(投稿者)
    2015/09/18(Fri) 11:43:14 編集(投稿者)

    【解決したい問題】

    こんにちは。
    Visual Studio Community 2015のVisual Basicについて質問があります。

    DataGridViewに書式を設定してある場合に、セルをダブルクリックかF2で編集しようとした時、
    書式設定前の値を編集できるようにし、編集終了後は書式にそった表示にしたいです。
    ※セルの値は"yyyy/MM/dd HH:mm:ss"の日付で、書式は"HH:mm:ss"です。

    ■希望の流れはこのような感じです。(写真添付)
    1.表示は10:00:00となっていますが、実際の値は2015/09/03 10:00:00というセルがあります。
    2.F2キーかダブルクリックで編集する時、2015/09/03 10:00:00と表示させたいです。
    3.そして2015/09/03 13:00:50と編集して完了したとします。
    4.この時、セルに13:00:50と表示させたいです。


    【解決するために何をしたか】

    現在のDataGridView1の状態です(コード)
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
      '行の追加を無効
      DataGridView1.AllowUserToAddRows = False
      '列のリサイズを設定
      DataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells
      'フォントサイズを設定
      DataGridView1.DefaultCellStyle.Font = New Font("MS ゴシック", 12)
      '列1×行5を追加
      DataGridView1.ColumnCount = 1
      DataGridView1.RowCount = 5
      '書式を設定
      DataGridView1.Columns(0).DefaultCellStyle.Format = "HH:mm:ss"
      '列のヘッダーに文字を設定
      DataGridView1.Columns(0).HeaderText = "日時"
      'セルに値を設定
      Dim dt As DateTime = New Date(2015, 9, 3, 9, 0, 0)
      Dim i As Integer
      For i = 0 To DataGridView1.Rows.Count - 1
        'セルに文字を設定
        DataGridView1(0, i).Value = dt.AddHours(i)
      Next i
    End Sub


    【追加事項】

    この質問の答えの動作をするサンプルコードを教えてほしいです。
    よろしくお願いします。

    ※OKWaveで質問していたのですが回答が付かず
    回答がつかないままの質問は4週間で削除されるという連絡がきたので
    そちらを取り消してからこちらで質問させていただきました。
793×339 => 250×106
イメージ
Form12.png
/22KB
引用返信 削除キー/
■33143 / inTopicNo.2)  Re[1]: DataGridViewに書式を設定した場合のセル編集時の表示を変えたい
□投稿者/ とくま 一般人(1回)-(2015/10/16(Fri) 15:41:46)
  • アイコン
    No33099に返信(ねここねこさんの記事)
    このサイトのサンプル
    http://dobon.net/vb/dotnet/datagridview/cellformattingvalue.html
    で表示文字だけ自分で "HH:mm:ss" に編集するだけでできそうな気がするけど?
    

引用返信 削除キー/
■33154 / inTopicNo.3)  Re[2]: DataGridViewに書式を設定した場合のセル編集時の表示を変えたい
□投稿者/ ねここねこ 一般人(4回)-(2015/10/21(Wed) 03:17:50)
  • アイコンありがとうございます。
    そのサンプルでは出来ませんでした。
引用返信 削除キー/
■33155 / inTopicNo.4)  Re[3]: DataGridViewに書式を設定した場合のセル編集時の表示を変えたい
□投稿者/ まりもん 一般人(28回)-(2015/10/21(Wed) 09:30:32)
  • アイコン
    No33154に返信(ねここねこさんの記事)
    > ありがとうございます。
    > そのサンプルでは出来ませんでした。
    
    CellBeginEditイベントとCellEndEditイベントで該当セルの場合はFormatを変更するようにすればどうでしょう?
    
    
    Private Sub DataGridView1_CellBeginEdit(ByVal sender As Object, _
                ByVal e As System.Windows.Forms.DataGridViewCellCancelEventArgs) _
                            Handles DataGridView1.CellBeginEdit
        DataGridView1(e.ColumnIndex, e.RowIndex).Style.Format = "yyyy/MM/dd HH:mm:ss"
    End Sub
    
    Private Sub DataGridView1_CellEndEdit(ByVal sender As Object, _
                ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) _
                          Handles DataGridView1.CellEndEdit
        DataGridView1(e.ColumnIndex, e.RowIndex).Style.Format = "HH:mm:ss"
    End Sub
    

引用返信 削除キー/
■33156 / inTopicNo.5)  Re[4]: DataGridViewに書式を設定した場合のセル編集時の表示を変えたい
□投稿者/ kiku 一般人(1回)-(2015/10/21(Wed) 10:17:36)
  • アイコン
    2015/10/21(Wed) 10:18:11 編集(投稿者)
    
    下記でできそうです。
    C#ですみません。
    
            private void dataGridView1_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e)
            {
                dataGridView1[e.ColumnIndex, e.RowIndex].Style.Format = "yyyy/MM/dd HH:mm:ss";
            }
    
            private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
            {
                dataGridView1[e.ColumnIndex, e.RowIndex].Style.Format = "HH:mm:ss";
                string s = (string)dataGridView1[e.ColumnIndex, e.RowIndex].Value;
                dataGridView1[e.ColumnIndex, e.RowIndex].Value = DateTime.Parse(s);
            }
    

引用返信 削除キー/
■33165 / inTopicNo.6)  Re[4]: DataGridViewに書式を設定した場合のセル編集時の表示を変えたい
□投稿者/ ねここねこ 一般人(5回)-(2015/10/30(Fri) 04:56:34)
  • アイコン2015/10/30(Fri) 05:39:17 編集(投稿者)

    まりもんさん
    ありがとうございます。
    編集しようとセルをクリックすると内容が消えてしまい使えませんでした。


    kikuさん
    ありがとうございます。
    VB.NETに変換してみましたが、
    編集しようとセルをクリックすると内容が消えてしまい使えませんでした。


    引き続き回答募集しております。
    よろしくお願いいたします。
引用返信 削除キー/
■33166 / inTopicNo.7)  Re[5]: DataGridViewに書式を設定した場合のセル編集時の表示を変えたい
□投稿者/ まりもん 一般人(29回)-(2015/10/30(Fri) 16:29:46)
  • アイコン
    編集に入ると消えてしまうとのことですが、
    編集から抜けても消えたままなのでしょうか?
    また、その時のValueはどのような状態なのでしょうか?
    
    
    .NET Framework4.6ではなく.NET Framework4.5で試しました。
    
    前回の私の提示したコードだけですと、初回編集時は期待通りの表示になりましたが
    一度編集すると、編集した文字列そのものが表示され、Formatに沿った表示になりませんでした。
    この時、編集前のValueの型がDateTimeなのに対し、編集後がStringになりました。
    
    そこでLoadイベントのDataGridViewの初期化時に
        '列の型を指定
        DataGridView1.Columns(0).ValueType = GetType(DateTime)
    と型を指定したところ、期待通りの動作になりました。
    
    
    
    実際に動作させたコードは以下の通りです。
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            '行の追加を無効
            DataGridView1.AllowUserToAddRows = False
            '列のリサイズを設定
            DataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells
            'フォントサイズを設定
            DataGridView1.DefaultCellStyle.Font = New Font("MS ゴシック", 12)
            '列1×行5を追加
            DataGridView1.ColumnCount = 1
            DataGridView1.RowCount = 5
    
            '列の型を指定
            DataGridView1.Columns(0).ValueType = GetType(DateTime)
    
            '書式を設定
            DataGridView1.Columns(0).DefaultCellStyle.Format = "HH:mm:ss"
            '列のヘッダーに文字を設定
            DataGridView1.Columns(0).HeaderText = "日時"
    
            'セルに値を設定
            Dim dt As DateTime = New Date(2015, 9, 3, 9, 0, 0)
            Dim i As Integer
            For i = 0 To DataGridView1.Rows.Count - 1
                'セルに文字を設定
                DataGridView1(0, i).Value = dt.AddHours(i)
            Next i
        End Sub
    
        Private Sub DataGridView1_CellBeginEdit(ByVal sender As Object, _
                ByVal e As System.Windows.Forms.DataGridViewCellCancelEventArgs) _
                            Handles DataGridView1.CellBeginEdit
            If e.ColumnIndex = 0 Then
                DataGridView1(e.ColumnIndex, e.RowIndex).Style.Format = "yyyy/MM/dd HH:mm:ss"
            End If
        End Sub
    
        Private Sub DataGridView1_CellEndEdit(ByVal sender As Object, _
                    ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) _
                              Handles DataGridView1.CellEndEdit
            If e.ColumnIndex = 0 Then
                DataGridView1(e.ColumnIndex, e.RowIndex).Style.Format = "HH:mm:ss"
            End If
        End Sub
    
    

引用返信 削除キー/
■33176 / inTopicNo.8)  Re[6]: DataGridViewに書式を設定した場合のセル編集時の表示を変えたい
□投稿者/ ねここねこ 一般人(6回)-(2015/11/14(Sat) 14:28:59)
  • アイコンまりもんさん

    こんにちは。

    返事が大変遅くなり、本当にすみませんでした。
    本日、教えていただいたコードを試してみたところ、
    無事希望通りの動作になりました!!!

    ずっと悩んでいて、これが出来なくて開発を停止し
    ていたので、本当に助かりました。

    どうもありがとうございました。
解決み!
引用返信 削除キー/



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

このトピックに書きこむ

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

Mode/  Pass/


- Child Tree -