質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
DataGrid

GUIの一種であり、データを表の形式でみることが可能です。

Q&A

解決済

1回答

18151閲覧

DataGridViewに入っている値に応じて表示を変更したい

VB_Beginner

総合スコア19

DataGrid

GUIの一種であり、データを表の形式でみることが可能です。

0グッド

0クリップ

投稿2017/04/10 06:46

###DataGridViewに入っている値に応じて表示を変更したい
現在、DataGridViewのカラムに数字型の情報が入っています(具体的には0もしくは1)
これを、0ならば"0:登録済み"1ならば"1:未登録"
このようにDataGridViewにある実データは数値型だが表示はテキストを表示したい

###該当のソースコード
With dgvTokuiSaki
.DataSource = dt
.Columns(4).Visible = False
.Columns(3).Visible = False
.Columns(0).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
.Columns(1).Width = 80
.Columns(2).Width = 75

###補足情報(言語/FW/ツール等のバージョンなど)
Visual Studio 2013
Visual Basic

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

CellFormatting イベントを次のように書いて試してみてください。
Column1 は実際のカラム名に書き換えてください。

VB.NET

1Private Sub dvgTokuisaki_CellFormatting(ByVal sender As Object, ByVal e As DataGridViewCellFormattingEventArgs) Handles dvgTokuisaki.CellFormatting 2 Dim grid As DataGridView = CType(sender, DataGridView) 3 If grid.Columns(e.ColumnIndex).Name = "Column1" AndAlso TypeOf e.Value Is Integer Then 4 Dim value As Integer = CInt(e.Value) 5 If value = 0 Then 6 e.Value = "登録済み" 7 Else If value = 1 Then 8 e.Value = "未登録" 9 Else 10 e.Value = "不正な値" 11 End If 12 e.FormattingApplied = True 13 End If 14End Sub

投稿2017/04/10 09:11

編集2017/04/10 09:13
Zuishin

総合スコア28660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2017/04/10 09:15

C# で書いたものを VB に直していますが、実際に VB で動かしたわけではないので、もしかしたら文法的に間違ったところや直し忘れなどあるかもしれません。
VB_Beginner

2017/04/10 23:55

わざわざのご回答ありがとうございます。 実装してみたのですがdataGridViewの中身はやはり整数値が表示されてしまいます。 データソースはaccessのmdbで数値型、0もしくは1のみが入っている状態です。 以前も似たようなソースコードを検索して見つけて実装してみたのですが望む動作が 得られませんでした。今回も0、1の整数値が表示されてしまいます。 また、状況が変わり次第、追記してゆこうと思いますありがとうございました。
VB_Beginner

2017/04/11 00:16

AndAlso TypeOf e.Value Is Integer を外したら動作いたしました! ありがとうございました。
Zuishin

2017/04/11 00:26

`TypeOf e.Value Is Integer` は、「そこに収められているデータの型が Integer ならば」という意味です。収められていたのが 0 ではなく "0" ならば外さなければなりません。 質問文には数値型と書いてありますが、実際には文字列など「数値に見えるもの」が入っている、または Integer ではなく Long などが入っているのではないでしょうか?
VB_Beginner

2017/04/11 01:10

MS_Accessからデータを取得していて、そのコラムは「数値型」です。 記述なされている通りTypeOf e.ValueはIntegerだと私は思うのですが、MS_Accessには longやintなどの型はなく、数値は数値型として収納されていると思っていました (自動的にIntegerにキャストされる)。 今、Console.WriteLine(grid.Columns(e.ColumnIndex).ValueType)を追加して型を表示させてみたら System.Byteと表示されましたので正しくは AndAlso TypeOf e.Value Is System.Byte Then となるのでしょうか。
Zuishin

2017/04/11 01:14

アクセスの場合、数値型にも種類があり、バイト数が設定できたと思います。おそらく 1 バイトの数値型、つまり Byte 型だったのでしょう。
VB_Beginner

2017/04/11 01:18

勉強不足でした、正しい型を見極めないといけませんね。 ご親切にありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問