0

DataGridViewCheckBoxColumn など、いくつかの異なるフォームを入力する DataGridView dgView があります。イベントを処理するために、追加しました

private void InitializeComponent()
{
    ...
    this.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dgView_CellClick);
    ...
}

実装は次のようになります。

private void dgView_CellClick(object sender, DataGridViewCellEventArgs e)
{
    if (Columns[e.ColumnIndex].Name == "Name of CheckBoxColumn")   // this is valid and returns true
    {
        Console.WriteLine("Handle single click!");
        // How to get the state of the CheckBoxColumn now ??
    }
 }

これは私が立ち往生しているところです。私はすでにさまざまなアプローチを試しましたが、まったく成功しませんでした:

DataGridViewCheckBoxColumn cbCol = Rows[e.RowIndex].Cells[e.ColumnIndex] as DataGridViewCheckBoxColumn; // does not work
DataGridViewCheckBoxColumn cbCol = (DataGridViewCheckBoxColumn)sender; // nor this
if (bool.TryParse(Rows[e.RowIndex].Cells[e.ColumnIndex].EditedFormattedValue.ToString(), out isBool)) // nor this
{ ... }

この CheckBoxColumn の State を取得する方法を教えてください。また、CheckBoxColumn を直接アドレス指定する他のイベントは存在しますか? (「ValueChanged」など)

更新: アプローチ

DataGridViewCell dgvCell = Rows[e.RowIndex].Cells[e.ColumnIndex];
Console.WriteLine(dgvCell.Value);

少なくとも、セルをクリックして値が変更される (または変更されない)の時点で true / false を返します。しかし、全体として、CheckBoxColumn に直接対処するソリューションが必要です。

解決策: 答えが明白すぎて見えない場合があります。私が直面していた問題は、セルをクリックしてチェックボックスをクリックすると、イベント「CellClick」がトリガーされることでした。したがって、適切な処理は、代わりに「CellValueChanged」イベントを使用することです。

 private void InitializeComponent()
 {
      ...
      this.CellValueChanged += new System.Windows.Forms.DataGridViewCellEventHandler(this.dgView_CellValueChanged);
      ...
 }

チェックボックスの値を決定するには、上記と同じ方法を使用します。

 if (e.ColumnIndex != -1 && Columns[e.ColumnIndex].Name == "Name of Checkbox")
 {
      bool cbVal = Rows[e.RowIndex].Cells[e.ColumnIndex].Value;
 }
4

4 に答える 4

0

セルの値をブール値にキャストするだけです

//check if it's the good column
bool result = Rows[e.RowIndex].Cells[e.ColumnIndex].Value;

編集:あなたの質問にはおそらく何かが欠けていますが、詳細を更新/追加する場合は見てみましょう

編集2:コメントの後、

cellClick で実行する場合は、値を逆にします。

bool result = !Rows[e.RowIndex].Cells[e.ColumnIndex].Value;
于 2013-07-18T15:32:49.773 に答える
0

UI コンポーネントを操作する 1 つの方法は、データ バインディングを使用することです。例を参照してください

 <DataGrid.Columns>
    <DataGridCheckBoxColumn Header="Online Order?" IsThreeState="True" Binding="{Binding OnlineOrderFlag}" />
</DataGrid.Columns>

このリンクでは、DataGrid の使用方法について詳しく説明しています。とにかく、送信者のクイックウォッチを実行して、送信者のタイプを確認しましたか?

于 2013-07-18T15:26:22.860 に答える
0

セルをチェックボックスにキャストして、そこでチェックされているかどうかを確認できます...

CheckBox chkb = (CheckBox)Rows[e.RowIndex].FindControl("NameOfYourControl");

次に、chkbに対してチェックを行います

if (chkb.Checked == true)

{
 //do stuff here...
}
于 2013-07-18T15:29:28.057 に答える