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

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

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

Re[3]: DataGridViewの文字列の書式設定について


(過去ログ 115 を表示中)

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

■68055 / inTopicNo.1)  DataGridViewの文字列の書式設定について
  
□投稿者/ よーすけ (1回)-(2013/09/19(Thu) 12:25:31)

分類:[VB.NET/VB2005 以降] 

こんにちは。VB2008を使用しています。
DataGridViewに管理番号の一覧を表示し、DataGridView上で編集できるようにしたいと考えています。

そこで質問なのですが、例えば、管理番号が"100-A"とした場合、セル編集時には「100-A」そのものを編集したいのですが、
編集モードでない時(通常時)のセル表示は、例えば「東100-A」のように、頭に固定文字(例では「東」)をつけて表示したいのです。
DataGridViewの書式設定でこのようなことは可能でしょうか?

よろしくお願い申し上げます。
引用返信 編集キー/
■68058 / inTopicNo.2)  Re[1]: DataGridViewの文字列の書式設定について
□投稿者/ しま (32回)-(2013/09/19(Thu) 15:05:29)
No68055 (よーすけ さん) に返信
> こんにちは。VB2008を使用しています。
> DataGridViewに管理番号の一覧を表示し、DataGridView上で編集できるようにしたいと考えています。
>
> そこで質問なのですが、例えば、管理番号が"100-A"とした場合、セル編集時には「100-A」そのものを編集したいのですが、
> 編集モードでない時(通常時)のセル表示は、例えば「東100-A」のように、頭に固定文字(例では「東」)をつけて表示したいのです。
> DataGridViewの書式設定でこのようなことは可能でしょうか?
>
> よろしくお願い申し上げます。

書式設定で可能かという問いなので、「書式設定では不可能でしょう」が私からの回答です。
行頭の固定文字列は、編集/入力時では取れて、入力が確定(編集が終了)したら行頭について見えるようになるということが
したいのでしょうか?
そうであれば、値と、表示文字列とを(DataGridView に任せず)別々に扱うことになると思います。

参考になるかどうかわかりませんが、以下のページは見ておいて損はないと思います(ご存知なら余計なことですが...)
http://dobon.net/vb/dotnet/datagridview/cellformattingvalue.html
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.datagridviewcell.formattedvalue.aspx
引用返信 編集キー/
■68062 / inTopicNo.3)  Re[2]: DataGridViewの文字列の書式設定について
□投稿者/ よーすけ (2回)-(2013/09/19(Thu) 16:24:42)
しま様、ご回答ありがとうございます。

しま様が教えてくださったサイトにあるDataGridViewのCellFormattingイベントを試しに実装すると、
セル編集時には「東100-A」と表示されますが、編集時にこの「東」を削除する・しないに関わらず
表示は「東○○」となり、実際のセルの値は「東」を取り除いたものになっていることが確認できました。
これなら、編集セル内に「東」の文字があっても問題なさそうですので、もう少し検証してみようと思います。

ありがとうございました。今後ともよろしくお願い申し上げます。
解決済み
引用返信 編集キー/
■68071 / inTopicNo.4)  Re[3]: DataGridViewの文字列の書式設定について
□投稿者/ よーすけ (3回)-(2013/09/20(Fri) 11:15:39)
あれから自分なりに色々と調べたところ、セルのオーナードローを使うことにより当初の目的を達成できることが分かりました。
どぼんさんの「DataGridViewのセルを自分で描画する」を参考に、とりあえず、以下のコードにて実現することができました。

参考:http://dobon.net/vb/dotnet/datagridview/ownerdrawcell.html

Private Sub DataGridView1_CellPainting(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellPaintingEventArgs) Handles DataGridView1.CellPainting
    If e.ColumnIndex = (対象列インデックス) AndAlso e.RowIndex >= 0 AndAlso _
            (e.PaintParts And DataGridViewPaintParts.ContentForeground) = DataGridViewPaintParts.ContentForeground Then

        Dim fColor As Color

        If (e.PaintParts And DataGridViewPaintParts.SelectionBackground) = DataGridViewPaintParts.SelectionBackground AndAlso _
                (e.State And DataGridViewElementStates.Selected) = DataGridViewElementStates.Selected Then
            fColor = e.CellStyle.SelectionForeColor
        Else
            fColor = e.CellStyle.ForeColor
        End If

        '文字以外が描画されるようにする
        Dim paintParts As DataGridViewPaintParts = _
            e.PaintParts And Not DataGridViewPaintParts.ContentForeground
        'セルを描画する
        e.Paint(e.ClipBounds, paintParts)

        '文字の描画
        '以下の「_dep_id」変数には"東"の文字が入っている
        TextRenderer.DrawText(e.Graphics, _
                              _dep_id & e.Value, _
                              e.CellStyle.Font, _
                              e.CellBounds, _
                              fColor, _
                              TextFormatFlags.EndEllipsis Or TextFormatFlags.VerticalCenter)

        '描画が完了したことを知らせる
        e.Handled = True
    End If
End Sub


これにて完全解決です。
ありがとうございました。

解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -