Did you miss a check on Page.IsPostBack?
Remember that in ASP.NET when you click a server button the code in the Page_Load is called before the code in the button click event.
Without
protected void Page_Load(object sender, EventArgs e)
{
if(!Page.IsPostBack)
{
// load data
}
}
the code that reloads the DATASET is executed again and, when you receive the control in the button click event, your changes are lost.