- PR -

Winアプリ DataGrid の DataGridBoolColumn について

投稿者投稿内容
とっと
大ベテラン
会議室デビュー日: 2004/03/25
投稿数: 197
投稿日時: 2004-08-09 11:05
お世話になります。

現在VB.NetでWinアプリを製作中です。その中で使用しているDataGrid内でチェックボックスを使用しています。その際以下を参照しました。

http://www.atmarkit.co.jp/fdotnet/dotnettips/105dgchkbox/dgchkbox.html

上記のコラムでは『ここでの注意点は、チェック・ボックスを表示する列のデータ型は必ずbool型(Boolean型)にすることである。』と記載されていますが、Boolean型以外を使用する事は不可能なのでしょうか?元のデータがInteger型でその値が1であればチェック、0であればチェックを外すようにしたいのです。

Dim TblStyle As New DataGridTableStyle

TblStyle.MappingName = "AAA"

Dim chkFlg As New DataGridBoolColumn
chkFlg.MappingName = "BBB"
chkFlg.TrueValue = 1  ← 『1』でチェック
chkFlg.HeaderText = "ヘッダーテキスト"
chkFlg.Width = 50
TblStyle.GridColumnStyles.Add(chkFlg)

と、やってみましたがダメでした。MappingName を指定しないとその列は表示されないようですし・・・。どなたか良いお知恵をお持ちでしたらご教授いただけますようお願いします。
えムナウ
大ベテラン
会議室デビュー日: 2004/06/10
投稿数: 187
お住まい・勤務地: 東京
投稿日時: 2004-08-09 14:22
情報が足りません。
以下のページをから変更している点は何なのか?
以下のページの内容は理解されているのでしょうか?
http://www.atmarkit.co.jp/fdotnet/dotnettips/105dgchkbox/dgchkbox.html

>MappingName を指定しないとその列は表示されないようですし・・・。
理解されていたらこんなコメントは出ないはずですが・・・

質問部分はテーブル・カラムの構成がわかりません。
FalseValue・AllowNull・NullValue を設定していないのはなぜですか?
_________________
えムナウ Microsoft MVP for Visual Developer - C#,2005/01-2007/12
えムナウのプログラミングのページ Blog1 Blog2
とっと
大ベテラン
会議室デビュー日: 2004/03/25
投稿数: 197
投稿日時: 2004-08-09 18:42
えムナウさん、ご返答ありがとうございます。返事が遅くなってすいません。また、情報不足をお詫びします。

>以下のページの内容は理解されているのでしょうか?

DataGridBoolColumnについては分かりません。

>理解されていたらこんなコメントは出ないはずですが・・・

理解しきれていません。元のデータの型がBooleanであればいけそうだと思ったのですが・。

>FalseValue・AllowNull・NullValue を設定していないのはなぜですか?

なお、チェック・ボックスのデータを常にON(true)またはOFF(false)のいずれかの値に設定する(つまり、nullが設定されないようにする)には、DataGridBoolColumnオブジェクトのAllowNullプロパティにfalseを設定する。と、いう記述が参照したページにありまして、必須とは思わなかったからです。FalseValue・NullValue についても同様です。

DataGridTextBoxColumnは実際に以下のコードを実装していますので出来ているつもりです。

Dim txtAAA As New DataGridTextBoxColumn
txtAAA.MappingName = "mapping_name"
txtAAA.HeaderText = "ヘッダー"
txtAAA.Width = 120
TblStyle.GridColumnStyles.Add(txtAAA)

以上が現状です。すいませんが、もう少しアドバイスをお願いします。
えムナウ
大ベテラン
会議室デビュー日: 2004/06/10
投稿数: 187
お住まい・勤務地: 東京
投稿日時: 2004-08-09 21:00
DataGridBoolColumn についてもう少し理解してもらおうと思って、
質問しましたが、とりあえず答えを書いておきます。

DataGridBoolColumn は、その名の通り bool を対象としています。
bool 型の true/false 以外は null と同じ扱いをします。
_________________
えムナウ Microsoft MVP for Visual Developer - C#,2005/01-2007/12
えムナウのプログラミングのページ Blog1 Blog2
とっと
大ベテラン
会議室デビュー日: 2004/03/25
投稿数: 197
投稿日時: 2004-08-10 08:11
 おはようございます。

ご返答ありがとうございます。

bool 型の true/false 以外は nullということはここで記述しているような使用方法は無理ということですね。元のデータの抽出時に工夫するか、チェックボックスは使用しないようにするか考えます。どうもありがとうございました。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-08-10 08:45
 型コンバータを作ってかませばよいのでは?

class BoolConvert {
 public static int ToInt(boolean b) {
  return (b == true ? 1 : 0);
 }
 public static boolean ToBool(int i) {
  if (i == 0 || i == 1) {
   return (i == 1);
  } else {
   throw new Exception();
  }
 }


> chkFlg.TrueValue = 1
当然、この「1」は、何かの変数でしょうから、こういうのもあり。
→chkFlg.TrueValue = (valiable == 1);

[ メッセージ編集済み 編集者: Jitta 編集日時 2004-08-10 08:47 ]
とっと
大ベテラン
会議室デビュー日: 2004/03/25
投稿数: 197
投稿日時: 2004-08-10 09:43
Jittaさん、ご投稿ありがとうございます。

大変良いアイデアだと思いますが、少し分からないことがあります。

型コンバータをどこにかませばよいのでしょうか?DataGridのデータとDataGridBoolColumnとはMappingNameプロパティで関連付けされており、このプロパティには関連付けるフィールド名を指定する事になっていると思うのですが、例えば元のSQL文で抽出されるフィールド名を指定する訳ですね。とすると、どうかませば良いのか分からないのですが、もう少しアドバイスをお願いします。

Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-08-10 11:43
引用:

えムナウさんの書き込み (2004-08-09 14:22) より:

理解されていたらこんなコメントは出ないはずですが・・・

FalseValue・AllowNull・NullValue を設定していないのはなぜですか?


 うぅ…失礼しました。



>とっと さん

まず、これ
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfsystemwindowsformsdatagridboolcolumnclasstopic.asp
引用:

DataGridBoolColumn には、各セルにオン (true)、オフ (false)、 DBNull.Value の 3 つの状態を持つチェック ボックスが格納されます。


で、えムナウさんのいわれるとおり、「FalseValue」「AllowValue」「NullValue」について調べる・・・
引用:

TrueValue 列の値を true に設定するときに使用される実際の値を取得または設定します。
FalseValue 列の値を false に設定するときに使用される実際の値を取得または設定します。
NullValue 列の値を Value に設定するときに使用される実際の値を取得または設定します。
AllowNull null 値を使用できるかどうかを示す値を取得または設定します。


これらのことより、以下のことがわかる、と。

  • DataGridBoolColumnは3値である
  • 欲しいのは2値である→NullValueを無効にしなければならない→AllowNull = False
  • Ture/Falseそれぞれに、特定の値を割りあてられる→TrueValue=1 / FalseValue=?

スキルアップ/キャリアアップ(JOB@IT)