The easiest way is through the method DataTable.Copy who copies structure and data of your original datatable in a new DataTable
DataTable dt = (dataGridView1.DataSource as DataTable).Copy();
dt.Remove("xyz");
Of course this could be problematic if your datatable contains a lot of records because you will have two sets of the same data in memory and the copy process is not immediate. However without knowing what is the purpose of your code I am not able to give alternatives.
For the reason of this behavior, in short, the DataTable is a reference variable, meaning that it contains a single value that address the area of memory where the real information of the DataTable is stored. When you get back that reference you are accessing the same memory area used by the DataSource property (also a reference) so the changes made through one reference are visible from the second reference.
A more in depth discussion could be found here
Value Type vs Reference Type
References and Values