1: public static DataTable MergeTables(DataTable dtFirst, DataTable dtSecond, string CommonColumn)
2: {
3: DataTable dtResults = dtFirst.Clone();
4: int count = 0;
5: for (int i = 0; i < dtSecond.Columns.Count; i++)
6: {
7: if (!dtFirst.Columns.Contains(dtSecond.Columns[i].ColumnName))
8: {
9: dtResults.Columns.Add(dtSecond.Columns[i].ColumnName, dtSecond.Columns[i].DataType);
10: count++;
11: }
12: }
13:
14: DataColumn[] columns = new DataColumn[count];
15: int j = 0;
16: for (int i = 0; i < dtSecond.Columns.Count; i++)
17: {
18: if (!dtFirst.Columns.Contains(dtSecond.Columns[i].ColumnName))
19: {
20: columns[j++] = new DataColumn(dtSecond.Columns[i].ColumnName, dtSecond.Columns[i].DataType);
21: }
22: }
23:
24: dtResults.BeginLoadData();
25: foreach (DataRow dr in dtFirst.Rows)
26: {
27: dtResults.Rows.Add(dr.ItemArray);
28: }
29: foreach (DataRow dr in dtSecond.Rows)
30: {
31: foreach (DataRow dr1 in dtResults.Rows)
32: {
33: if (dr1[CommonColumn].ToString().Equals(dr[CommonColumn].ToString()))
34: {
35: foreach (DataColumn c in columns)
36: {
37: dr1[c.ColumnName] = dr[c.ColumnName];
38: }
39: }
40: }
41: }
42: dtResults.EndLoadData();
43: return dtResults;
44: }