4

最初の列がチェックボックスである DataGridView コントロールを作成しました。チェック ボックス内をクリックすると、コードが正しく実行されます。ただし、チェックボックスではなくセルでクリックが発生した場合、コードはチェックボックスの状態を正しく処理しますが、チェックボックス自体を更新しないため、クリック前の状態のままになります。

これを修正するにはどうすればよいですか?

   private void myDataGrid_CellClick(object sender, DataGridViewCellEventArgs e)
   {
       if (e.RowIndex == -1) return; //check if row index is not selected
       DataGridViewCheckBoxCell ch1 = new DataGridViewCheckBoxCell();
       ch1 = (DataGridViewCheckBoxCell)myDataGrid.Rows[e.RowIndex].Cells[0];

       if (ch1.Value == null)
           ch1.Value = false;
       switch (ch1.Value.ToString())
       {
           case "False":

               ch1.Value = true;

               break;
           case "True":

               ch1.Value = false;
               break;
       }
      //BUT doesn't seem to matter what I do with ch1.Value. Inside the checkbox all is OK but
      //outside, no.

   }

行の別のセルをクリックすると、チェック ボックスが正しく処理されます。チェックボックスのセルをクリックしたときのみ、チェックボックス自体はクリックしません。

つまり、コードは正しく実行されますが、UI は正しく更新されず、変更が反映されません。ここに画像の説明を入力そのため、チェックボックスが実際にチェックされていても、ワードの後に​​もチェックされていないように見える前にチェックボックスがチェックされていない場合。

ありがとうロン

4

2 に答える 2

-3

私は 100% 確信しています。

 /// <summary>
    ///データグリッドビューのチェックボックスのダブルクリックイベント
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void Ichiran_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
    {
        this.Ichiran_CheckBoxCellClick(sender, e);
    }

    /// <summary>
    /// データグリッドビューのチェックボックスのクリックイベント
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void Ichiran_CellClick(object sender, DataGridViewCellEventArgs e)
    {
        this.Ichiran_CheckBoxCellClick(sender, e);
    }

    /// <summary>
    /// セルの値自体がクリックされた際に発生するCellContentClickイベントの
    /// コールバックメソッドです。
    /// </summary>
    /// <param name="sender">イベント送信元オブジェクト&lt;/param>
    /// <param name="e"></param>              
    private void Ichiran_CellContentClick(object sender, DataGridViewCellEventArgs e)
    {
        this.Ichiran_CheckBoxCellClick(sender, e);
    }

    /// <summary>
    /// チェックボックスクリック
    /// </summary>
    private void Ichiran_CheckBoxCellClick(object sender, DataGridViewCellEventArgs e)
    {
        if (this.Ichiran.CurrentCell != null && this.Ichiran.CurrentCell is r_framework.CustomControl.DataGridCustomControl.DgvCustomCheckBoxCell)
        {
            if (e.RowIndex < 0)
            {
                return;
            }
            var cell = this.Ichiran["chb_delete", e.RowIndex];
            if (cell.Value == null) cell.Value = false;
            cell.Value = !(bool)cell.Value;
            cell.ReadOnly = true;
            cell.ReadOnly = false;
        }
    }

    /// <summary>
    /// CurrentCellDirtyStateChangedイベントハンドラでDataGridView.CommitEditメソッドを呼び出して値をコミットします。
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void Ichiran_CurrentCellDirtyStateChanged(object sender, EventArgs e)
    {
        this.Ichiran.CommitEdit(DataGridViewDataErrorContexts.Commit);

    }
于 2015-08-19T02:28:53.723 に答える