Hi vygi0913,
Here i have made sample that give you the unmatched record from two csv/datatable.
HTML
<asp:GridView ID="gvCsv1" runat="server" ShowHeader="false" />
<br />
<asp:GridView ID="gvCsv2" runat="server" ShowHeader="false" />
<br />
<asp:GridView ID="gvUmmatchedRecords" runat="server" />
Code
protected void Page_Load(object sender, EventArgs e)
{
DataTable first = new DataTable();
first.Columns.AddRange(new DataColumn[] {
new DataColumn("Dekking id", typeof(string)),
new DataColumn("Dekking", typeof(string)),
new DataColumn("Acnv_id",typeof(string)),
new DataColumn("Acnv description",typeof(string)),
new DataColumn("From",typeof(string)),
new DataColumn("To",typeof(string)),
new DataColumn("Value",typeof(string)) });
DataTable second = first.Clone();
DataTable csv1 = getDatatableFromCsv(first, Server.MapPath("Csvs/CSV1.csv"));
DataTable csv2 = getDatatableFromCsv(second, Server.MapPath("Csvs/CSV2.csv"));
DataTable unMatchedRecords = getDifferentRecords(csv1, csv2);
bool isMatched = tablesAreSame(csv1, csv2);
gvCsv1.DataSource = first;
gvCsv1.DataBind();
gvCsv2.DataSource = second;
gvCsv2.DataBind();
gvUmmatchedRecords.DataSource = unMatchedRecords;
gvUmmatchedRecords.DataBind();
}
private DataTable getDatatableFromCsv(DataTable dataTable, string filePath)
{
DataTable dt = dataTable;
string[] file = File.ReadAllLines(filePath);
foreach (string row in file)
{
if (!string.IsNullOrEmpty(row))
{
dt.Rows.Add();
int i = 0;
foreach (string cell in row.Split(';'))
{
dt.Rows[dt.Rows.Count - 1][i] = cell;
i++;
}
}
}
return dt;
}
private DataTable getDifferentRecords(DataTable FirstDataTable, DataTable SecondDataTable)
{
DataTable ResultDataTable = new DataTable("ResultDataTable");
using (DataSet ds = new DataSet())
{
ds.Tables.AddRange(new DataTable[] { FirstDataTable.Copy(), SecondDataTable.Copy() });
DataColumn[] firstColumns = new DataColumn[ds.Tables[0].Columns.Count];
for (int i = 0; i < firstColumns.Length; i++)
{
firstColumns[i] = ds.Tables[0].Columns[i];
}
DataColumn[] secondColumns = new DataColumn[ds.Tables[1].Columns.Count];
for (int i = 0; i < secondColumns.Length; i++)
{
secondColumns[i] = ds.Tables[1].Columns[i];
}
DataRelation r1 = new DataRelation(string.Empty, firstColumns, secondColumns, false);
ds.Relations.Add(r1);
DataRelation r2 = new DataRelation(string.Empty, secondColumns, firstColumns, false);
ds.Relations.Add(r2);
for (int i = 0; i < FirstDataTable.Columns.Count; i++)
{
ResultDataTable.Columns.Add(FirstDataTable.Columns[i].ColumnName, FirstDataTable.Columns[i].DataType);
}
ResultDataTable.BeginLoadData();
foreach (DataRow parentrow in ds.Tables[0].Rows)
{
DataRow[] childrows = parentrow.GetChildRows(r1);
if (childrows == null || childrows.Length == 0)
ResultDataTable.LoadDataRow(parentrow.ItemArray, true);
}
foreach (DataRow parentrow in ds.Tables[1].Rows)
{
DataRow[] childrows = parentrow.GetChildRows(r2);
if (childrows == null || childrows.Length == 0)
ResultDataTable.LoadDataRow(parentrow.ItemArray, true);
}
ResultDataTable.EndLoadData();
}
return ResultDataTable;
}
public bool tablesAreSame(DataTable table1, DataTable table2)
{
DataTable dt;
dt = getDifferentRecords(table1, table2);
if (dt.Rows.Count == 0)
return true;
else
return false;
}
Screenshot
