DataGridViewでチェックボックスを表示するには?

解決


スプー  2008-06-17 03:20:05  No: 144821

過去ログなど調べましたが、結果が得られないのでどうか教えてください。

OS:WindXP(SP2) 言語:VB2005 DB:Oracle9i で開発しています。

あるテーブルのデータをDataGridViewに表示しています。
その際に、Number(1,0)型で1か0しかデータが入っていない
フィールドの表示をチェックボックスにしてデータが1の時に、
チェックボックスのチェックを入れるようにしたいのですが
うまくいきません。

何か方法はありせんでしょうか?

教えてください。お願いします。


ひぃ  2008-06-17 03:37:45  No: 144822

デザイナで既にチェックボックスにしてるんですよね?

でしたら、Rows.Addする時に、1ならTrueとすれば入りませんか?
例:
For Each wk in var
    Me.DataGridView.Rows.Add( IIf(wk.Check = "1", True, False ))
Next


ひぃ  2008-06-17 03:39:19  No: 144823

ごめんなさい。上記の例、文字列になってました。
Me.DataGridView.Rows.Add( IIf(wk.Check = "1", True, False ))

Me.DataGridView.Rows.Add( IIf(Cint(wk.Check) = 1, True, False ))
等で対応してみてはどうでしょうか。


やじゅ  2008-06-17 03:39:29  No: 144824

何ででしょうね?
正常にバインドされていれば、勝手にチェックオンになるはずですが・・・

bool型のデータをDataGridViewにバインドすれば自動的にDataGridViewCheckBoxColumnが使用されます。
http://dobon.net/vb/dotnet/datagridview/datagridviewcheckboxcolumn.html


スプー  2008-06-17 03:54:53  No: 144825

>ひぃさん早速の返信ありがとうございます。

すいません。説明不足でした。

デザイナで列の追加編集は行わずに
DataGridView.DataSource = J60_DataSet.Tables("J60M")
という方法をとっています
(後でDataRowStateを使用したいため)


スプー  2008-06-17 03:59:25  No: 144826

>やじゅ さん早速の返信ありがとうございます。

>http://dobon.net/vb/dotnet/datagridview/datagridviewcheckboxcolumn.html
は調べたのですが解決には至りませんでした。

SQL文のフィールドの型が数値なのが問題なのでしょうか?

現状ではDataGridViewにはフィールド値の1と0しか表示されません・・・


やじゅ  2008-06-17 05:04:07  No: 144827

>SQL文のフィールドの型が数値なのが問題なのでしょうか?
試しに文字列型でやってみるとか

掲示板ではいつ回答がもらえるか分からないですからね
どんどん思いついたことを試さないと時間がもったいないですよ。


魔界の仮面弁士  2008-06-17 08:19:34  No: 144828

> Number(1,0)型で
それは、Oracle 側の話であって、DataTable の列の事では無いですよね。

DataGridView が見ているのは、Oracle のデータではなく、DataTable に
格納されたデータなのですから、ここで気にするべきは、DataColumn の
DataType に割り当てられた型(Decimal かな?)の方でしょう。

> デザイナで列の追加編集は行わずに
> DataGridView.DataSource = J60_DataSet.Tables("J60M")
> という方法をとっています
つまり、AutoGenerateColumns = True にしている、という事ですよね。

> データが1の時に、チェックボックスのチェックを入れるようにしたい
そのためには、それぞれの列のセルタイプを明示的に指定せねば
なりませんし、1 と 0 のどちらを On とするかも指定する必要があります。

Boolean 型の列であれば、自動的にチェックボックス列になりますが、
今回の DataTable は、そうはなっていませんよね。
(Oracle の列である以上、ブール型になる事は無いでしょうし)

要するに、チェックボックスとして表示したいなら、そのための
コードが必要であるという事です。このコードは、デザイン時に
設定しておいても良いですし、コードで書いても構いませんが、
割り当てるテーブルが固定的な場合は、デザイナで設定した方が楽でしょう。

プログラムで指定する場合は、こんな感じ。

Dim Col As New DataGridViewCheckBoxColumn()
Col.HeaderText = "列2"  '列ヘッダのテキスト
Col.DataPropertyName = "Column2"    '連結列の名前
Col.TrueValue = 1       'チェックボックス=On の値
Col.FalseValue = 0      'チェックボックス=Off の値

DataGridView1.Columns.Insert(0, Col)    '先頭列に割り当て


やじゅ  2008-06-17 09:52:39  No: 144829

なるほど、oracleだとbool型が無いから、
そういう設定が必要なんですね。
はー、とても偉そうななど言えませんな

数値型でいいか文字列型とするかってとこで
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?mode=viewtopic&topic=13764&forum=7&start=16


スプー  2008-06-17 17:21:32  No: 144830

魔界の仮面弁士さんの方法で解決しました。

>やじゅさんアドバイスありがとうございました。

>魔界の仮面弁士さん具体的なアドバイスありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加