2011-06-30 4 views
4

DataGridViewにはDataTableのデータとDataGridViewCheckBoxCellsのバインドされていない列が読み込まれています。 DataGridViewの行は、ユーザーが保存した値を持つ別のDataTableと比較され、一致する場合はその行のチェックボックスがチェックされます。私は、フォームのロードprivate void WQMDrill_Load(object sender, EventArgs e)中にこのアクションを実行するメソッドを呼び出すとDataGridViewCheckBoxCellフォームのロード中にチェックを設定すると、表示時の表示方法

foreach (int j in selectedObjectives) 
{ 
    foreach (DataGridViewRow r in dgvObjectives.Rows) 
    { 
     if (j == Convert.ToInt32(r.Cells["ObjectiveID"].Value)) 
     { 
      dgvObjectives.CurrentCell = r.Cells["Select"];  
      ((DataGridViewCheckBoxCell)r.Cells["Select"]).Value = true; 
      //dgvObjectives.InvalidateCell(r.Cells["Select"]); 
      //dgvObjectives.EndEdit(); 
      //dgvObjectives.CommitEdit(DataGridViewDataErrorContexts.Commit); 

     } 
     if (Convert.ToInt32(r.Cells["ObjectiveID"].Value) == selectedIndex) 
     { 
      r.Selected = true; 
     } 
    } 
} 

、値が正しく設定されている、:ここで

は、値を比較し、「真」の横にあるチェックボックスの値を設定するコードですチェックボックスはチェックされません。しかし、フォームのロードが完了した後に呼び出されると、コードは完全に機能します。残念なことに私の場合、ロード処理中にこれらをチェックする必要があります。

私は私の問題ではっきりしていたことを願っています。この問題についての助けに感謝します。ご覧のとおり、DataGridViewコントロール全体だけでなく、セルだけを無効にしようとしました。私も持っています

private void dgvObjectives_CurrentCellDirtyStateChanged(object sender, EventArgs e) 
{ 
    if (this.dgvObjectives.CurrentCell.ColumnIndex == 0) 
    { 
     this.dgvObjectives.CommitEdit(DataGridViewDataErrorContexts.Commit); 
    } 
} 

この時間中は起動しません。ありがとうございました。

+0

最初のスニペットは、フォームの 'Load'イベントで呼び出されたコードとまったく同じですか?ロード中に値が正しく設定されていることを確認するためにそれを踏んだことがありますか? –

+0

フォームの 'Load'イベントは、このコードが存在するメソッドを呼び出します。私はコードをステップ実行し、チェックボックスの値は正しく設定されていますが、チェックボックスはチェックされているようには表示されません。ただし、このメソッドは、ユーザーがボックスを手動でチェックし、そこに完全に機能する場合にも呼び出されます。 – Megan

答えて

1

あなたはDataBindingCompleteのEventHandlerの中であなたのチェックボックスの選択及び更新ロジックを置くことができ、FormLoad後に何でも前に、この火災は、ユーザーに表示されます。

+0

ありがとうございます。実際には、セルの値をtrueに設定します。((DataGridViewCheckBoxCell)r.Cells ["Select"])。値= true; '選択した行を真に設定した行は多分でした。私はあなたの提案をDataBindingCompleteで試してみるつもりです。ありがとうございました。 – Megan

+0

@Megan私の最初の返事を残念に思いますが、コードを提供するために私の答えを編集していたので、実際にあなたが正しくコードを読みました。だから私はあなたの問題を解決するはずのDataBindingCompleteについて少し残しました。 –

0

私は、CommitEditが実際にPaintをセルで発射するとは確信していません。 CellMouseUpイベントを処理し、列がチェックボックス列の場合はEndEditを発射してみてください。

private void dgvObjectives_CellMouseUp(object sender, DataGridViewCellMouseEventArgs e) 
{ 
    if (dgvObjectives.Columns[e.ColumnIndex] is DataGridViewCheckBoxColumn) 
    { 
     dgvObjectives.EndEdit(); 
    } 
} 
+0

手動でチェックボックスをクリックしたときに問題に遭遇することはありません。ロードメソッド中にプログラムで値を設定したときです。ユーザーがボックス自体をチェックすると、すべてが正しく起動し、チェックボックスの状態が変わります。しかし、私がプログラムをロードすると、自動的にチェックするためのチェックボックスが必要になり、それが問題に取り組んでいます。しかし、あなたの応答に感謝します。 – Megan

-1

私は同じ問題を抱えていて、それに対処するためにさまざまな方法を試しましたが、ほとんど失敗しました.this.BeginInvoke(new CDelegate())を試してみました。

関連する問題