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.
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