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

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

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

Re[2]: DataGridViewCheckBoxColumns


(過去ログ 47 を表示中)

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

■25404 / inTopicNo.1)  DataGridViewCheckBoxColumns
  
□投稿者/ 見習いPG (1回)-(2008/09/19(Fri) 01:52:26)

分類:[C#] 

学校でシステム開発を専攻している者です。
Visualstadio 2005 C#を勉強し始めて4日目の初心者ですが宜しくお願いします。

DataGridViewの事でお聞きしたいのですが、
DataGridViewCheckBoxColumnsを使用して、データベースとは別にチェックボックスを用意し、
そこにデータベースを読み込みます。
その状態から、チェックボックスのtrue/falseを判定し、trueならレコードの主キーを取得し、
Form1からForm2へ主キーを渡し、Form2で処理をしていきたいんですが、
DataGridViewCheckBoxColumnsのチェックボックスの情報をどうやって取得すればいいのか分からず詰まっています。
.valueで取得して比較(== true)をしようとしたんですが、object型みたいなので比較できませんでした。

本を探しても、ネットで探しても見つからなかった(応用力が足らなかっただけかも)のでご教授ください。
また、お勧めのサイト等あれば教えて頂けると助かります。
引用返信 編集キー/
■25406 / inTopicNo.2)  Re[1]: DataGridViewCheckBoxCol
□投稿者/ ま (125回)-(2008/09/19(Fri) 08:55:34)
2008/09/19(Fri) 09:03:22 編集(投稿者)
2008/09/19(Fri) 08:57:57 編集(投稿者)

object.ToString()
ってやると、型情報を取得出来ます。
どんな型なのか見てみればいいのでは?

デバッガで、イベントの入り口にブレークポイント設定して止めたときも、ウォッチ窓に型情報が出てきますね。

private void Form1_Load(object sender, EventArgs e)
{
MessageBox.Show(sender.ToString());
}

private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show(sender.ToString());

}

こんな感じ。
object 型は他のスレッドに詳細に誰かが書いているのでどのようなものなのか参考にして下さい。追記:#25150 のスレッドですね。


追記:object.GetType().ToString() の方が直感的な表現でいいかな。

追記:あとは自分で調べられるでしょ。どーゆー風にあーしたらこーなるとか。



引用返信 編集キー/
■25415 / inTopicNo.3)  Re[2]: DataGridViewCheckBoxCol
□投稿者/ ロック (97回)-(2008/09/19(Fri) 09:27:29)
自分の場合、同じような処理にぶつかった時は
SQLでSELECTするときに、適当にチェックボックス用の列を(「0 AS check」とか)を
作成して、その列とDataGridViewのチェックボックス列とをバインドしています。
あとはDataTableから0が非チェックで1がチェック状態として取れます。

引用返信 編集キー/
■25419 / inTopicNo.4)  Re[1]: DataGridViewCheckBoxColumns
□投稿者/ カドルドエグ (29回)-(2008/09/19(Fri) 09:50:16)
No25404 (見習いPG さん) に返信
> .valueで取得して比較(== true)をしようとしたんですが、object型みたいなので比較できませんでした。
DataGridViewCheckBoxColumn メンバ
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.datagridviewcheckboxcolumn_members.aspx

DataGridViewCheckBoxColumnは「TrueValue」「FalseValue」でTrue(チェックがついてる)時False(チェックがついてない)時の値を自分で
設定し取得することができます。
また、このプロパティはobject型なので、なんのクラスにするかは自分次第となります。

画面上でしか使わないから、と画面上でのみ処理をしようとすると結構やっかい(設定が面倒)なので、
ロックさんの御意見のように、SQLの段階で一時列として最初から持たせてしまった方が楽だと思います。
引用返信 編集キー/
■25423 / inTopicNo.5)  Re[1]: DataGridViewCheckBoxColumns
□投稿者/ 魔界の仮面弁士 (860回)-(2008/09/19(Fri) 10:27:20)
No25404 (見習いPG さん) に返信
> DataGridViewCheckBoxColumnsを使用して、

既に他の方が書かれていますが、DataGridViewCheckBoxColumn や DataGridViewCheckBoxCell の場合、
基準値(TrueValue/FalseValue/IndeterminateValue プロパティ)および
型設定(ValueType/ThreeState プロパティ)について、調べておくと良いかと思います。

DataTable 等をデータバインドしている場合は、連結先のデータ型も確認を。


> .valueで取得して比較(== true)をしようとしたんですが、object型みたいなので比較できませんでした。

やり方はいろいろありますが、たとえば、object の値を
キャストして比較するとか、Equals で比較するなどの方法があります。

たとえば、
 object data = true;
のように、bool 値 を持った object 型のプロパティや変数があった場合、その比較に
 if (data == true)
 if (data)
のような書き方をしてしまうと、コンパイルエラーとなりますよね。

前者は[CS0019]『演算子 '==' を 'object' と 'bool' 型のオペランドに適用することはできません。』
後者は[CS0266]『型 'object' を 'bool' に暗黙的に変換できません。明示的な変換が存在します。』


bool 値を持つ object 型に対して比較判定する場合は、
 if ((bool)data == true)
 if ((bool)data)
などのように、bool 型への「キャスト」を行うか、
 if (bool.Equals(data, true))
 if (true.Equals(data))
のように、「Equals メソッド」による比較を行う事ができます。
あるいは、data.ToString() や、bool.TryCast() を使って比較する方法もあります。


他の型の場合も同様で、これが int 値を持つ object 型であれば、
 if ((int)data == 12345)
 if (int.Equals(data, 12345))
 if (12345.Equals(data))
などの比較が可能です。


ただしキャストによる比較は、指定した型に変換できない値に対しては
(たとえば、DBNull や null を bool にキャストしようとした場合など)、
変換エラーになりますので注意してください。

一方、Equals メソッドによる比較は、値だけではなく型の一致性も
重要視される事に注意してください。たとえば、int 型の 123 と
long 型の 123 を比較した場合、これらは ≠ であるとみなされます。
引用返信 編集キー/
■25483 / inTopicNo.6)  Re[2]: DataGridViewCheckBoxColumns
□投稿者/ 見習いPG (2回)-(2008/09/20(Sat) 05:31:59)
皆様、非常に参考になるお答えありがとうございます。
参考にして、色々やってみたところ、目的の動作を達成しました。
本当に感謝します。
またよろしくお願いいたします。
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -