Rocky
Rocky

Reputation: 4524

how to compare 2 datatable and get unique records in 3rd datatable?

I have 2 datatable let say dtData1 and dtData2. I have records in both the datatable I want to compare both the data table and want to create a new datatable let say dtData3 with uniqe records.

suppose: dtData1 has 10 records, and dtData2 has 50 records, but what ever records are there in dtData2 in that 7 records are same as dtData1. So here I want unique records in dtData3, means I want only 43 records in dtData3.

we don't know in datatable where we have the duplicate, and its possible that we will not have duplicates or its also possible that we will have all duplicate records.

So in dtData3 I need unique records

Some one please help me.

Upvotes: 1

Views: 9155

Answers (5)

Rocky
Rocky

Reputation: 4524

public DataTable CompareTwoDataTable(DataTable dtOriginalTable, DataTable dtNewTable, ArrayList columnNames)
    {
        DataTable filterTable = new DataTable();
        filterTable = dtNewTable.Copy();
        string filterCriterial;
        if (columnNames.Count > 0)
        {
            for (int iNewTableRowCount = 0; iNewTableRowCount < dtNewTable.Rows.Count; iNewTableRowCount++)
            {
                filterCriterial = string.Empty;
                foreach (string colName in columnNames.ToArray())
                {
                    filterCriterial += colName.ToString() + "='" + dtNewTable.Rows[iNewTableRowCount][colName].ToString() + "' AND ";
                }
                filterCriterial = filterCriterial.TrimEnd((" AND ").ToCharArray());
                DataRow[] dr = dtOriginalTable.Select(filterCriterial);
                if (dr.Length > 0)
                {
                    filterTable.Rows[filterTable.Rows.IndexOf(filterTable.Select(filterCriterial)[0])].Delete();
                }
            }
        }
        return filterTable;
    }

Upvotes: 0

Maf
Maf

Reputation: 1

First Create Array variables to save unique coloumn values for datatable3. Use Foreach loop with second gridview rows. If any match then dnt save it in a array value, if dnt match then save it in arrays. and display it by attaching with third gridview.......

e.g

string[] name = new string[4];

int i=0,j=0;
foreach(GridViewRows gv in GridView1.rows)
{
    if(gv.Cells[0].Text == GridView2.Rows[i].Cells[0].Text)' //if match
    {
       // dnt save
    } 
    else'  //if dnt match save in array for further use
    {
        name[j] = gv.Cells[0].Text;
        j= j++;
    }
    i=i++;
}

After Saving unique values in Array "name"...Bind it in Third Gridview During DataBound of third Gridview add this method...

Private void GridView3_RowDataBound(object sender,EventArgs e)
{
    if(e.Row.RowState == DataControlState.DataRow)
    {
        foreach(string nm in name)
        {
            e.Rows.Cells.Add(name);      
        }
    }
}

Upvotes: 0

YS.
YS.

Reputation: 1828

var dtData3 = dtData2.AsEnumerable().Except(dtData1.AsEnumerable(), DataRowComparer.Default);

Upvotes: 5

Amish Kumar
Amish Kumar

Reputation: 259

Use this.. Probably it will help you.

Suppose you have two data table

DataTable dt1 = new DataTable();
            dt1.Columns.Add("Name");
            dt1.Columns.Add("ADD");
            DataRow drow;
            for (int i = 0; i < 10; i++)
            {
                drow = dt1.NewRow();
                drow[0] = "NameA" + 1;
                drow[1] = "Add" + 1;
                dt1.Rows.Add();
            }
            DataTable dt2 = new DataTable();
            dt2.Columns.Add("Name");
            dt2.Columns.Add("ADD");
            DataRow drow1;
            for (int i = 0; i < 11; i++)
            {
                drow1 = dt2.NewRow();
                drow1[0] = "Name" + 1;
                drow1[1] = "Add" + 1;
                dt2.Rows.Add();
            }

Now To solve your problem Call :-

DataTable d3 = CompareTwoDataTable(dt1, dt2);

The method is something like this;--

public static DataTable CompareTwoDataTable(DataTable dt1, DataTable dt2)
        {
            dt1.Merge(dt2);
            DataTable d3 = dt2.GetChanges();

            return d3;
        }

Upvotes: 1

tnchalise
tnchalise

Reputation: 1583

Then where the need to compare dtData1 and dtData2? Instead you can copy the contents from dtData2 to dtData3 starting from index7.

Upvotes: 0

Related Questions