2008-12-17 7 views
3

Comment puis-je positionner un bouton dans un formulaire afin qu'il soit toujours au-dessus d'une colonne dans une grille DevExpress?Obtenir la position d'une colonne de la grille

Les colonnes de la grille sont configurées de sorte qu'elles ne peuvent pas être redimensionnées, mais la grille et les colonnes sont redimensionnées avec la forme. System.Forms.Control a le PointToScreen method qui ressemble à ce qu'il fournirait cette fonctionnalité, mais pas une méthode dans une colonne gridview DevExpress.

+0

Pouvez-vous utiliser un modèle pour l'en-tête et y mettre une balise DIV, puis obtenir la position de cette balise div en JavaScript pour obtenir la position à l'écran? – tlbignerd

Répondre

2

Vous pouvez trouver les coordonnées des colonnes relatives au GridControl et les convertir en coordonnées Form. Pour cela, vous pouvez utiliser l'objet GridColumnsInfo que vous pouvez obtenir de la propriété GridViewInfo.ColumnsInfo. Pour obtenir l'objet GridViewInfo, vous pouvez utiliser la méthode gridView.GetViewInfo().
Une fois que vous avez trouvé les coordonnées, vous devrez vous abonner aux événements qui se produisent à différents changements GridView et GridControl. Par exemple, vous pouvez vous abonner aux événements GridView.Layout et GridView.LeftCoordChanged. Pour le redimensionnement, vous devez vous abonner à l'événement GridControl.Resize.

Exemple:

private void UpdatePosition(GridView gridView, string columnName, Control control) 
{ 
    var column = gridView.Columns[columnName]; 

    if (column == null) return; 

    var viewInfo = (GridViewInfo)gridView.GetViewInfo(); //using DevExpress.XtraGrid.Views.Grid.ViewInfo 
    var columnInfo = viewInfo.ColumnsInfo[column]; 

    if (columnInfo != null) 
    { 
     var bounds = columnInfo.Bounds; //column's rectangle of coordinates relative to GridControl 

     var point = PointToClient(gridView.GridControl.PointToScreen(bounds.Location)); //translating to form's coordinates 

     control.Left = point.X; 
     control.Top = point.Y - control.Height; 
     control.Width = bounds.Width; 

     control.Show(); 
    } 
    else 
     control.Hide(); 
} 

Vous pouvez appeler cette méthode pour chaque événement que vous avez souscrit.

+0

Cela fonctionne comme un rêve. Merci. J'ai enlevé le réglage du haut comme j'avais disposé mon bouton dans un panneau juste au-dessus de la grille. Le bouton se déplace comme un rêve. – HeXanon

Questions connexes