Here I have created sample that Compares GridView1 to GridView2 and vice-versa.you can compare only GridView1 to GridView2 by just doing some modification in given code.
HTML
<div>
First Grid:
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false">
<Columns>
<asp:BoundField DataField="Id" HeaderText="Id" ItemStyle-Width="30" />
<asp:BoundField DataField="Name" HeaderText="Name" ItemStyle-Width="150" />
<asp:BoundField DataField="Country" HeaderText="Country" ItemStyle-Width="150" />
</Columns>
</asp:GridView>
<br />
Second Grid:
<asp:GridView ID="GridView2" runat="server" AutoGenerateColumns="false">
<Columns>
<asp:BoundField DataField="Id" HeaderText="Id" ItemStyle-Width="30" />
<asp:BoundField DataField="Name" HeaderText="Name" ItemStyle-Width="150" />
<asp:BoundField DataField="Country" HeaderText="Country" ItemStyle-Width="150" />
</Columns>
</asp:GridView>
<br />
<br />
<asp:Button Text="Get Uncommon Data" runat="server" OnClick="GetUncommonData" />
<asp:GridView ID="GridView3" runat="server" AutoGenerateColumns="false">
<Columns>
<asp:BoundField DataField="Id" HeaderText="Id" ItemStyle-Width="30" />
<asp:BoundField DataField="Name" HeaderText="Name" ItemStyle-Width="150" />
<asp:BoundField DataField="Country" HeaderText="Country" ItemStyle-Width="150" />
</Columns>
</asp:GridView>
</div>
C#
protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
{
BindGrid1();
BindGrid2();
}
}
private void BindGrid1()
{
DataTable dt = new DataTable();
dt.Columns.AddRange(new DataColumn[3] { new DataColumn("Id", typeof(int)),
new DataColumn("Name", typeof(string)),
new DataColumn("Country",typeof(string)) });
dt.Rows.Add(1, "John Hammond", "United States");
dt.Rows.Add(2, "Mudassar Khan", "India");
dt.Rows.Add(3, "Suzanne Mathews", "France");
dt.Rows.Add(4, "Robert Schidner", "Russia");
GridView1.DataSource = dt;
ViewState["Grid1Data"] = dt;
GridView1.DataBind();
}
private void BindGrid2()
{
DataTable dt = new DataTable();
dt.Columns.AddRange(new DataColumn[3] { new DataColumn("Id", typeof(int)),
new DataColumn("Name", typeof(string)),
new DataColumn("Country",typeof(string)) });
dt.Rows.Add(1, "John Hammond", "United States");
dt.Rows.Add(2, "Mudassar Khan", "India");
dt.Rows.Add(6, "David", "France");
dt.Rows.Add(8, "Kevin", "Russia");
GridView2.DataSource = dt;
ViewState["Grid2Data"] = dt;
GridView2.DataBind();
}
protected void GetUncommonData(object sender, EventArgs e)
{
DataTable dt1 = (DataTable)ViewState["Grid1Data"];
DataTable dt2 = (DataTable)ViewState["Grid2Data"];
var qry1 = dt1.AsEnumerable().Select(a => new { Id = a["Id"].ToString() });
var qry2 = dt2.AsEnumerable().Select(b => new { Id = b["Id"].ToString() });
var exceptAB = qry1.Except(qry2);
var exceptBA = qry2.Except(qry1);
var mismatchDataAB = (from a in dt1.AsEnumerable()
join ab in exceptAB on a["Id"].ToString() equals ab.Id
select a);
var mismatchDataBA = (from a in dt2.AsEnumerable()
join ab in exceptBA on a["Id"].ToString() equals ab.Id
select a);
var unCommon = mismatchDataAB.Union(mismatchDataBA);
if (unCommon.ToArray().Length > 0)
{
GridView3.DataSource = unCommon.CopyToDataTable();
GridView3.DataBind();
}
}
Screenshot
![](https://i.imgur.com/yQUTnCX.png)
you can also refer below link if you want to Compare whole row (ie. Id,Name,Country)
http://canlu.blogspot.in/2009/05/how-to-compare-two-datatables-in-adonet.html