15

データ テーブルを にバインドしましたDataGridView。このデータ テーブルには、タイプが「ステータス」という列がありますBoolean。コードを介し て値を設定することも、true問題なく設定することもできます。false

ただし、指定された行が既にチェックされているかどうかを確認する方法がわかりません。これは私が使用しようとしているコードであり、コンパイルすると「指定されたキャストが無効です」というエラーが表示されます。

どんな助けでも大歓迎です。

if (rowIndex >= 0)
{
    var cbxCell = (DataGridViewCheckBoxCell)dgvScan.Rows[rowIndex].Cells["Status"];

    if ((bool)cbxCell.Value)
    {
        // Do stuff
    }
    else
    {
        // Do other stuff
    }
}
4

7 に答える 7

10

問題は、DataGridCheckBoxColumn のデフォルト FALSE 値が null であり、デフォルト TRUE 値がブール値 True であることです。ブール値は NULL 可能ではないため、これは問題を引き起こします。この問題は、次の 2 つの方法で解決できます。

    if (cbxCell.Value != null && (bool)cbxCell.Value)
    {
        do stuff;
    }

これを解決するもう 1 つの方法は、列の TrueValue プロパティを何らかの値に設定することです。これは、次のように設計時に行うことができます。

ここに画像の説明を入力

次に、次のように記述できます。

    if ((string)cbxCell.Value == "T")
    {
        do stuff;
    }

これは、文字列が null 許容であるため機能します。

注意: FalseValue を F に設定しても、false 値はまだ null のように見えるため、FalseValue プロパティを無視することをお勧めします。

もう 1 つの注意事項: 上記のように TrueValue に何かを入れてから消去しようとすると、True 値が null (痛い) になるため、列を削除してから再度追加してデフォルトの状態に戻す必要があります。または、次のようにコードで変更できます。

((DataGridViewCheckBoxColumn)DataGridView1.Columns["Selected"]).TrueValue = true
于 2014-01-07T20:52:56.173 に答える
1
 if (Convert.ToBoolean(dgvScan.Rows[rowIndex].Cells["Status"].Value))
{
//Do Something
}
else {
// Do Something
}
于 2013-11-30T06:12:33.920 に答える
0

これについては経験がありませんが、列またはプロパティの値を確認する必要があると思います。

この例を見てみてください:

http://programmingwithstyle.blogspot.com/2007/06/how-to-get-from-datagridviewcheckboxcel.html

于 2009-10-13T22:23:51.783 に答える
0

CbxCell.Value等しい必要がありDBNull.Valueます (列に null 値を含めることができますよね?)

キャストする前に DBNull をチェックします。

if (!DBNull.Value.Equals(CbxCell.Value) && (bool)CbxCell.Value == true)
{
    //Do stuff
}
else
{
    //Do Stuff
}
于 2009-10-13T22:50:30.333 に答える