2011-03-02 15 views

Respuesta

7
+5

No estoy seguro de por qué esto es marcada como correcta, ya que no lo es. Este evento se lanzará en muchas otras circunstancias, como volver a vincular la tabla de datos, etc. – Robinson

+1

Esto dispara al menos dos veces por cada vez que el usuario reordena las columnas. Una vez para el punto de inicio, una vez para el punto final, y una vez para cada columna en el medio. Dependiendo de lo que esté haciendo con el evento, esto podría ser una gran carga. – Wayne

0

No sé exactamente lo que está tratando de lograr. Si desea agregar un comportamiento de clasificación de columna personalizado, puede echar un vistazo en this tutorial on customizable column sorting.

Básicamente, se detecta el evento MouseDown y se observa si el usuario hizo clic en el encabezado de una columna. Si lo hizo y hay un evento asignado, se puede ejecutar.

3

te sugieren ...

1 - Haz una variable static int.

2 - afectan a esta variable en el controlador :: ColumnHeaderMouseClick

3 - Cambiar la línea con esta variable en el controlador :: Ordenado

Ejemplo:

private static int idRequetePourtriage = -1; 


    private void dgvRequete_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e) 
    { 
     if (dgvRequete.SelectedRows.Count > 0) 
      idRequetePourtriage = Convert.ToInt32(dgvRequete.SelectedRows[0].Cells[TEXT_colNameIdRequete].Value.ToString()); 

    } 

    private void dgvRequete_Sorted(object sender, EventArgs e) 
    { 
     desactivateGridSelected(); 


     int rowCount = 0; 
     Boolean isFind = false; 

     while (rowCount < dgvRequete.Rows.Count && !isFind) 
     { 
      if (idRequetePourtriage == Convert.ToInt32(dgvRequete.Rows[rowCount].Cells[TEXT_colNameIdRequete].Value.ToString())) 
      { 
       isFind = true; 
       activateGridSelected(); 

       dgvRequete.Rows[rowCount].Selected = true; 
      } 
      rowCount++; 
     } 

     if (!isFind) 
     { 
      activateGridSelected(); 
     } 
    } 
1

Uso ColumnDisplayIndexChanged caso

+0

Sería útil si pudiera proporcionar algunos detalles sobre cómo usar el evento 'ColumnDisplayIndexChanged' – cpburnz

5

El evento "Usar ColumnDisplayIndexChanged" parece el correcto. Funcionó para mí (Añadiría un comentario que tenía el representante para él.)

Un controlador de eventos para ese evento contendrá e.Column que refleja el nuevo valor para esa columna. La propiedad que está buscando es DisplayIndex. Tenga en cuenta que el evento se activará para cada columna que modificó DisplayIndex.

En vb.net:

Private Sub data_ColumnDisplayIndexChanged(sender As Object, e As System.Windows.Forms.DataGridViewColumnEventArgs) Handles data.ColumnDisplayIndexChanged 

    Debug.Print(e.Column.DisplayIndex & vbTab & e.Column.Name) 

End Sub 

Dado que el evento se disparará en el arranque (varias veces), es posible que desee agregar algún tipo de lógica para evitar que se dispare cuando se va a agregar columnas o re- la organización de las columnas según la configuración anterior:

Private Sub dataAnts_ColumnDisplayIndexChanged(sender As Object, e As System.Windows.Forms.DataGridViewColumnEventArgs) Handles dataAnts.ColumnDisplayIndexChanged 

    If bSortingColumns = False Then 
     Debug.Print(e.Column.DisplayIndex & vbTab & e.Column.Name) 
    End If 

End Sub 

O agregar un controlador de eventos mediante programación se realiza después de que su código de inicio.

The MSDN link.

Cuestiones relacionadas