2010-10-08 36 views

Respuesta

15

tuve este mismo problema y nada estaba trabajando. La solución que funcionó para mí fue establecer la propiedad 'Tabstop' en False y llamar al método ClearSelection() inmediatamente después de enlazar los datos.

+3

Bonito consejo. Esto todavía activa el evento SelectionChanged, que podría causar problemas para algunos. –

+0

@Above Puede desvincular el evento de cambios de selección haciendo algo como esto. "MyDataGrid.SelectionChanged - = this.MyDataGrid_SelectionChanged;" // realiza algunas operaciones y luego vuelve a vincular el evento de cambio de selección al hacer esto, "MyDataGrid.SelectionChanged + = this.MyDataGrid_SelectionChanged;" no estoy seguro de si esto ocasiona algunos problemas de rendimiento. – Hari

3

conjunto de propiedades de la DGV CurrentCell en nulo después de los datos de unión de la DG V:

dataGridView1.CurrentCell = null; 

Tenga en cuenta que haciendo esto no impedirá eventos DGV asociados con la fila y la selección de células de disparo; que tendrá que añadir fila seleccionada o cheques de recuento de células en los eventos RowEnter, algo como esto:

private void dataGridView1_RowEnter(object sender, DataGridViewCellEventArgs e) { 
    if (dataGridView1.SelectedRows.Count == 1) { 
     // Do stuff since a row is actually selected ... 
    } 
} 
17

que estaba teniendo un poco de problemas con este mismo. Tengo un control de usuario con DataGridView que se rellena en la aplicación/carga de formulario. La selección de la primera fila parece ocurrir después de se completa el enlace de datos y la cuadrícula se llena/se procesa. El evento de carga de control del usuario (y presumiblemente, la carga de la forma también) se dispara antes de eso, por lo que llamar a gridView.ClearSelection() o anular gridView.CurrentCell en esos eventos de carga no tiene efecto neto.

Lo que finalmente trabajó para me llamaba .ClearSelection() de la DataBindingComplete caso de la DataGridView sí. Funcionó como por arte de magia.

+1

Esto funcionó para mí, pero el evento SelectionChanged de la cuadrícula todavía se llama después de esto con la fila seleccionada, así que tengo que tener lógica de indicador feo en todo mi formulario para descubrir que el usuario seleccionó una fila o no. – qwerty13579

+0

Es por eso que no debería leer solo la respuesta superior.:/ –

+0

Intenté la respuesta marcada y eso no funcionó para mí, esta respuesta funciona! Gracias Dave. – harag

1

después de que limita los datos sólo llamar

dataGridView.ClearSelection(); 

Creo que ha intentado llamar antes de los datos a dataGrindView, si es que se ha intentado alguna vez

+0

Esto no funciona; la primera fila todavía está seleccionada – qwerty13579

0

SI entiendo la Q. Esto evita que una celda muestre el enlace de datos seleccionado después de. Por lo tanto, el color de fondo permanece en blanco. También puede Editar las columnas y configurarlo allí.

DataGridView.DefaultCellStyle.SelectionBackColor = DataGridView.DefaultCellStyle.BackColor; 
1

Debe llamar a: clearSelection después del evento: DataBindingComplete

0

También quería de sólo lectura DataGridView, y en mi caso, un hilo separado es la obtención lentamente de datos y entregarlo al hilo GUI a través de un multi Lista de hilos y Temporizador de formularios. En este enfoque, el hilo de la GUI expande la cuadrícula de datos según sea necesario mientras permite navegar.

Con las sugerencias anteriores, la selección podría estar oculta, pero ninguna podría impedir que la celda se restablezca cuando mi hilo de la GUI llame a dataGridView.Rows.Add() con una selección. Esto incluye eventos de enganche para evitar la selección y deshabilitar el modo de edición.

me encontré con el comportamiento que quería con

dataGridView.AllowUserToAddRows = false; 

Ahora tengo una cuadrícula de datos dinámicamente de tamaño, forma asíncrona cargado que es de sólo lectura.

No me gustó la solución BackgroundWorker, porque el progreso es una carga para mi código de carga. Tampoco me gustó el requisito de reconstruir una nueva DataTable cada actualización de la grilla.No pude encontrar ninguna sugerencia para actualizar DataGridView con una DataTable que se está creando, pero parece que esto debería ser posible.

-1

que tenían el mismo problema y lo han resuelto reemplazando el caso OnPropertyChanged del GridView

protected override void OnPropertyChanged(DependencyPropertyChangedEventArgs e) 
{ 
    base.OnPropertyChanged(e); 
    this.ClearSelection(); 
} 
0

Asegúrese de que no están llamando el método para cargar los datos del constructor del formulario. Si llama desde el Form.Load()

también después de la DataGridView es hacer esta cargada

DataGridView.Rows[0].Selected = false; 
0

que tenía el mismo problema en mi caso, en lugar de establecer la primera fila para la visibilidad falsa. Sería mejor establecer el valor de GridColor para evitar el riesgo en SelectionChanged Evento.

  1. Ponga dgv.ClearSelection() en DataBindingComplete Evento y establecer GridColor a su DataGridView BackColor.

  2. Establezca GridColor en color visible (por ejemplo: Gris) en su método de llenado/evento de disparo.

0

mayoría de las veces, es causada por un pequeño error, tal vez el datagridview se encuentra en un cuadro de grupo. Si hay más cuadros de grupo, la selección se detendrá en el primer cuadro de grupo, por lo tanto, mantenga el cuadro de grupo por prioridad.

Cuestiones relacionadas