How about using this function
public System.Web.UI.WebControls.GridView CopyGridView(System.Web.UI.WebControls.GridView p_GridviewToCopy)
{
System.Web.UI.WebControls.GridView returnCoppiedGridView = new System.Web.UI.WebControls.GridView();
DataTable copiedTable = new DataTable();
DataColumn newColumn = null;
DataRow newRow = null;
for (int columnIndex = 0; columnIndex < p_GridviewToCopy.Columns.Count; columnIndex++)
{
newColumn = new DataColumn(p_GridviewToCopy.Columns[columnIndex].HeaderText, typeof(String));
newColumn.Caption = p_GridviewToCopy.Columns[columnIndex].HeaderText;
copiedTable.Columns.Add(newColumn);
}
for (int xx = 0; xx < p_GridviewToCopy.Rows.Count; xx++)
{
newRow = copiedTable.NewRow();
for (int yy = 0; yy < p_GridviewToCopy.Columns.Count; yy++)
{
newRow.SetField(p_GridviewToCopy.Columns[yy].HeaderText, p_GridviewToCopy.Rows[xx].Cells[yy]);
}
copiedTable.Rows.Add(newRow);
}
returnCoppiedGridView.DataSource = copiedTable;
returnCoppiedGridView.DataBind();
return returnCoppiedGridView;
}