When you debug and add a watch at "e.SortExpression", does it change at all ? I am not yet that familiar with GridView, but i see you change e.SortDirection. Does that also change e.SortExpression?
Try set "dv.Sort = e.SortExpression" in the if/else instead of the e-expression. This is just my first thoughts. dont have software here to try myself..