seleccionados false event datagridviewcheckboxcolumn contar change cellvaluechanged c# .net datagridview datagridviewcheckboxcell

c# - false - datagridviewcheckboxcolumn set checked



DataGridViewCheckBoxCell cómo mostrar marcado cuando se establece durante la carga de formulario (3)

Tengo un DataGridView que carga datos de una DataTable, junto con una columna independiente de DataGridViewCheckBoxCells. Las filas en DataGridView se comparan con una DataTable separada con los valores que el usuario ha guardado, y si hay una coincidencia, debe marcar la casilla de verificación para esa fila.

Aquí está el código que compara los valores y establece el valor de la casilla de verificación en ''verdadero'':

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; } } }

Cuando llamo al método para realizar esta acción durante el formulario load private void WQMDrill_Load(object sender, EventArgs e) , los valores se establecen correctamente, pero las casillas de verificación no se activan. Sin embargo, cuando se le llama después de que el formulario ha terminado de cargarse, el código funciona perfectamente. Desafortunadamente para mí, absolutamente necesito que estos lo revisen durante el proceso de carga.

Espero ser claro con mi problema, cualquier ayuda en este asunto sería muy apreciada. Como puede ver, he intentado invalidar la celda solo, así como todo el control DataGridView. tambien tengo

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

Eso no se dispara durante este tiempo. Gracias.


No estoy seguro de que llamar a CommitEdit realmente CommitEdit el Paint en la celda. Intente manejar el evento CellMouseUp y EndEdit si la columna es una columna de casilla de verificación.

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


Puede poner la selección de su casilla de verificación y la lógica de actualización en el controlador de eventos DataBindingComplete, que se activa después de FormLoad pero antes de que se muestre nada al usuario.


Tuve el mismo problema y probé muchas formas diferentes de solucionarlo, la mayoría falló, excepto cuando probé this.BeginInvoke(new CDelegate()) .