Il primo problema è risolvibile verificando se la pagina è stata rimandata al server:

If not ispostback then...

Altrimenti quando clicchi su un pulsante all'interno della griglia (e passi ancora nel pageload)le colonne già esistenti vengono mantenute dalla viewstate e, ne aggiungi una nuova serie.

Per la seconda invece ti consiglierei di mettere la colonna per l'edit nel file.aspx e, poi se come mi sembra di capire, hai l'esigenza di mostrarla oppure di nasconderla a seconda dei casi fai così:

if .......mod ....
DG_gestori.Columns(0).visible=False

Ciao
Legnetto