3 votes

Obtenir la position d'une colonne de la grille

Comment positionner un bouton dans un formulaire de manière à ce qu'il soit toujours au-dessus d'une colonne dans une grille DevExpress ?

Les colonnes de la grille sont configurées de manière à ne pas pouvoir être redimensionnées, mais la grille et les colonnes sont redimensionnées avec le formulaire. System.Forms.Control a le Méthode PointToScreen qui semble fournir cette fonctionnalité, mais pas une méthode dans une colonne de grille DevExpress.

2voto

nempoBu4 Points 702

Vous pouvez trouver les coordonnées des colonnes par rapport à la GridControl et traduire ensuite en Form coordonnées. Pour cela, vous pouvez utiliser GridColumnsInfo que vous pouvez obtenir à partir de GridViewInfo.ColumnsInfo propriété. Pour obtenir GridViewInfo vous pouvez utiliser gridView.GetViewInfo() méthode.
Une fois que vous aurez trouvé les coordonnées, vous devrez vous abonner aux événements qui se produisent à différents endroits. GridView y GridControl changements. Par exemple, vous pouvez vous abonner à GridView.Layout et GridView.LeftCoordChanged événements. Pour le redimensionnement, vous devez vous abonner à GridControl.Resize événement.

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 auquel vous avez souscrit.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X