grazie per le risposte MdE2005,

ho trovato qual è il problema!

il problema era che la mia datagridview è associata a un dataset! in pratica il codice era giusto ma avendola associata a un dataset la datagridview aveva la proprietà AutoGenerateColumns impostata a true e in pratica dopo che gli avevo impostato i displayindex giusto il framework nel design fa altre procedure a quanto ho capito e me le andava a cambiare.. nn ho capito con che logica purtroppo..

me ne sono accorto perchè nell'avento dplayindexchanged ho messo un msgbox e ho visto che oltre a entrarci giustamente quando io eseguivo la mia funzione ci entrava anche dopo..

impostando la proprità AutoGenerateColumns a false dopo che aveva già creato le colonne prese dal dataset e prima che facessi eseguire la mia funzione dove ordine le colonne, funziona!!

adesso devo solo capire se questo mi crea altri problemi però almeno l'ordinamento viene eseguito in maniera corretta!

grazie ancora!