2

datagridview(True/False) からチェックボックスの値を取得したいのですが、常に値「null」を取得します。チェックボックスの値を取得するコードは次のとおりです。

DataGridViewCheckBoxCell boolean = (DataGridViewCheckBoxCell)dgv[e.ColumnIndex, e.RowIndex];
string checkCheckboxChecked = ((bool)boolean.FormattedValue) ? "False" : "True";

このコードは、チェックボックスがオンになっている場合でもafalse を返します。また、別のコードを試しました:Boolean.FormattedValue

object value = dgvVisual[e.ColumnIndex, e.RowIndex].Value;

そして、このコードは null の値を返します

なぜこれが起こるのですか?

PSはのeイベントですCELL CONTENT CLICK

以下は、datagridview セル コンテンツ クリックの完全なコードです。

private void dgvVisual_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
    int Number1= int.Parse(dgvVisual[0, e.RowIndex].Value.ToString());
    int Number2 = (e.ColumnIndex - 1);                
    DataGridViewCheckBoxCell boolean = (DataGridViewCheckBoxCell)dgvVisual[e.ColumnIndex, e.RowIndex];
    bool checkCheckboxChecked = (null != boolean && null != boolean.Value && true == (bool)boolean.Value);
    //string checkCheckboxChecked = "";
    if (checkCheckboxChecked)
    {
        //do something if the checkbox is checked
    }
    else
    {
        //do something if the checkbox isn't
    }
}

解決済み: を変更しCELL END EDIT EVENT、クリック コンテンツdatagridview.CurrentCellを別のセルに追加しました。

4

1 に答える 1

1

セルをブール値と呼ぶのは少し奇妙です。そして、そのFormattedValueプロパティを使用します。をDataGridViewフォームに追加し、2 つの列Textとを追加しましたCheckboxCheckBoxですDataGridViewCheckBoxColumn。次に、ボタンを追加しました。これにより、次のことがわかります。

private void button1_Click(object sender, EventArgs e)
{
    dgv.AutoGenerateColumns = false;
    DataTable dt = new DataTable();
    dt.Columns.Add("Text");
    dt.Columns.Add("CheckBox");
    for (int i = 0; i < 3; i++)
    {
        DataRow dr = dt.NewRow();
        dr[0] = i.ToString();
        dt.Rows.Add(dr);
    }
    dgv.DataSource = dt;            
}

private void dgv_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
    foreach (DataGridViewRow row in dgv.Rows)
    {
        var oCell = row.Cells[1] as DataGridViewCheckBoxCell;
        bool bChecked = (null != oCell && null != oCell.Value && true == (bool)oCell.Value);
    }
}
于 2012-07-21T02:08:29.570 に答える