RISOLTO
Alla fine l'ho risolto in questo modo, forse non sarà il "massimo" ma sembra funzionare. Lo scrivo così se serve ad altri...
Ho utilizzato due datagridview sovrapposte. La prima che chiamo grdFiltri e la seconda che chiamo grdDati. La seconda viene associata a un datasource e al caricamento del form creo le colonne della grglia dei filtri copiando le colonne dalla seconda in questo modo:
Private Sub CreaColonne()
Dim nr As Integer, i As Integer
grdFiltri.Width = grdDati.Width
nr = grdDati.Columns.Count
For i = 0 To nr - 1
grdFiltri.Columns.Add(grdDati.Columns(i).Name, grdDati.Columns(i).HeaderText)
grdFiltri.Columns(i).Width = grdDati.Columns(i).Width
grdFiltri.Columns(i).Visible = grdDati.Columns(i).Visible
Next
grdFiltri.Rows.Add()
End Sub
A questo punto ho il problema di sincronizzare le due griglie:
intercetto gli eventi resize e ColumnWidthChanged di entrambe le griglie e con i dati nuovi di una aggiorno l'altra
Naturalmente ho impostato la proprietà ColumnsHeaderVisible della grtdDati a False in modo che si veda solo quella dei filtri.
A questo punto non devo far altro che scorrere la riga dei filtri per vedere se l'utente ha inserito qualcosa. Sembra che funzioni.
Grazie ancora,
Massimo