Did not yet go through your entire code but try this:
Change:
column.For(c => "<button onclick='location.href='www.gmail.com';'>gmail</button>").Named("My New Column").Encode(false);
To:
column.For(c => "<button onclick=\"javascript:window.open('http://gmail.com');\">gmail</button>").Named("My New Column").Encode(false);
This should at least make your links work. Your links were not working since your buttons were not properly formed.
To trigger Controller Actions, you need to use the following type of code.
column.For(c => "<input type=\"button\" value=\"Go Somewhere Else\" onclick=\"location.href='<%: Url.Action(\"myMethod\", \"myController\") %>'\" />").Encode(false);