データグリッドビュー内のチェックボックスがチェックされているかどうかをチェックする方法

datagridview にあるチェックボックスの bool 条件を確認するにはどうすればよいですか。チェックされている場合は true 、チェックされていない場合は false にしたいと考えています。誰でも私を助けることができます。

Is it possible to handle this in dataGridView_CellContentClick

3

5 答え

これは、DataGridViewのMSDNページで少し説明されています。ここおよびこちら。

特に彼らは言う:

DataGridViewCheckBoxCellのクリックに対して、このイベントは、   チェックボックスが値を変更するので、計算したくない場合は   現在の値に基づく期待値   代わりにDataGridView.CellValueChangedイベント。そのイベント   ユーザー指定の値がコミットされた場合にのみ発生します。   通常、フォーカスがセルを離れるときに発生します。   DataGridView.CurrentCellDirtyStateChangedイベント。そのハンドラでは、if   現在のセルがチェックボックスセルである場合は、DataGridView.CommitEdit   メソッドを呼び出し、Commit値を渡します。

CellClick型のイベントを使用しないことをお勧めします(セルから離れるまで値をプッシュしないため)。代わりにCurrentCellDirtyStateChangedとCommitEditメソッドを使用します。

だからあなたは次のようになります:

dataGridView1.CurrentCellDirtyStateChanged += new EventHandler(dataGridView1_CurrentCellDirtyStateChanged);
dataGridView1.CellValueChanged += new DataGridViewCellEventHandler(dataGridView1_CellValueChanged);

void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
    if (dataGridView1.Columns[e.ColumnIndex].Name == "CB")
    {
        MessageBox.Show(dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString());    
    }
}

void dataGridView1_CurrentCellDirtyStateChanged(object sender, EventArgs e)
{
    dataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit);
}

チェックされた値を取得するために、これはDataGridViewCheckBoxCellのValueプロパティにすぎません。

だからあなたが行くなら:

dataGridView1.Rows[rowindex].Cells[cellindex].Value 

(変更がコミットされた後に)チェックボックスに対応するブール値を取得します。

これは私のために働く David
追加された 著者 Dorababu Meka,

この方法でこれを取得しようとすることができます。たとえば、インデックスに基づいてグリッドをループしている場合は、チェックされた状態を見つけることができます。

bool IsChecked = Convert.ToBoolean((dataGridView1[ColumnIndex, RowIndex] as DataGridViewCheckBoxCell).FormattedValue))
0
追加された
しかし、私の要件としては、 dataGridView_CellContentClick の条件をチェックしているので、これは常に false
追加された 著者 Dorababu Meka,

それは100%働く。

 private void grd_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {

            grd.CommitEdit(DataGridViewDataErrorContexts.Commit);
            bool Result = Convert.ToBoolean((grd[e.ColumnIndex, e.RowIndex] as DataGridViewCheckBoxCell).Value);
        }
0
追加された

チェックボックスがデザイナで定義されている場合、チェックボックスの名前を参照し、trueまたはfalseのチェックされたプロパティをチェックするだけで簡単です。

しかし、私はあなたがコードによってDataGridにチェックボックスを追加していると思われる?

この場合、チェックボックスの参照を保存する必要があります。 もし私があなたがどこにリストに私のデータグリッドに追加するすべてのチェックボックスを追加するか、あなたはそれらを辞書に追加する名前でそれらを参照したい場合。

Checked_Changedイベントをチェックボックスに選択し、プロパティパネルの小さなボルトアイコンをクリックしてcheckedChangedイベントを見つけてダブルクリックすることで、イベントをチェックボックスにバインドすることもできます。

イベントコードでは、次のように入力してチェックボックスをクリックできます。 CheckBox mycheckbox = CheckBoxとしての送信者。

チェックされているかどうかを判断するためにmycheckbox.checkedを参照してboolを取得します。

0
追加された
私が参照したときに checked プロパティを取得できません
追加された 著者 Dorababu Meka,
DataGridViewCheckBoxCellを使用して見つけた場合、私は人に言っているのですが、 value だけを取得できるのは Checked
追加された 著者 Dorababu Meka,
私は WinForms で尋ねています。
追加された 著者 Dorababu Meka,
サンプルコードを投稿できますか?
追加された 著者 Dorababu Meka,
申し訳ありませんが、C#は大文字と小文字を区別するので、あなたは "Checked"(大文字のC)を参照する必要があります。
追加された 著者 Mats Edvinsson,
さて、あなたはDataGridViewCheckBoxCellについて言及したので、私はあなたが意味することを理解しています。私はあなたがFalseValueとTrueValueの値を設定する必要があります列を設定すると思う。 checkbox.Valueを参照すると、FalseValueに入力した内容がチェックされていない場合はその値が、そうでない場合はTrueValueになります。希望が助ける:)
追加された 著者 Mats Edvinsson,
私が言ったことを達成するためのコードはありません。 DataGridViewCheckBoxCell.Valueを正しく取得できるとおっしゃいましたか?デザイナーにいるときは、データグリッドビューを右クリックして[列の編集]をクリックします。チェックボックスをオンにし、右側のペインで[データ]タブを探し、チェックボックスをオフにしたときにDataGridViewCheckBoxCell.Valueから取得する値をFalseValueに入力して、TrueValueに値を入力しますチェックされたら取得する
追加された 著者 Mats Edvinsson,
チェックボックスをコードで追加する場合は、次のようにすることができます: `private void dataGridView1_CellContentClick(object sender、DataGridViewCellEventArgs e){var checkcell = new DataGridViewCheckBoxCell(); checkcell.FalseValue = false; checkcell.TrueValue = true; dataGridView1 [0、0] = checkcell; (DataGridViewCheckBoxCell)DataGridView1 [0、0])Value)== true){//チェックボックスがオンの場合に行う作業}} `
追加された 著者 Mats Edvinsson,
それはほとんど読めるものではないので、新しい答えとしてそれを投稿してください。
追加された 著者 Mats Edvinsson,
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
    var checkcell = new DataGridViewCheckBoxCell();
    checkcell.FalseValue = false;
    checkcell.TrueValue = true;
    checkcell.Value = false;
    dataGridView1[0, 0] = checkcell; //Adding the checkbox

    if (((bool)((DataGridViewCheckBoxCell)dataGridView1[0, 0]).Value) == true)
    {
        //Stuff to do if the checkbox is checked
    }
}
0
追加された
しかし、このチェックボックスがチェックされていない状態にあったときに初めてチェックボックスをクリックすると、これは機能しません。これは、チェックボックスがチェックされた状態のときに機能します
追加された 著者 Dorababu Meka,
ああ、気づいた。私の編集でそれは動作します。次の行を追加してください:checkcell.Value = false;
追加された 著者 Mats Edvinsson,