C# DataGridView

在C# winform中,用DataGridView来显示DataSet中的数据,DataSet中包含多个DataTable,用按钮来切换DataGridView显示的数据,大概方式如下
有多个按钮,点击后执行事件:
dataGridView.DataSource = dataSet.Tables[tableName];//不同的按钮,这里对应的tableName是不同的
保存数据时执行
DataTable dt = dataSet.Tables[tableName];//要保存的表名
dt = (DataTable) dataGridView.DataSource;
目前遇到的问题是,当不改动DataGridView中单元格的值时,可以正常切换dataGridView中显示的数据,一旦修改了单元格的数据,保存后再切换的时候,就大概率会报错:“System.ArgumentOutOfRangeException”类型的未经处理的异常在 mscorlib.dll 中发生 (索引超范围)
我试过用:
dataGridView.DataSource = dataSet;
dataGridView.DataMember = tableName;//要显示表的名称,在切换时,直接更改tableName,但还是报错
有没有大家帮忙解答一下