static void Main(string[] args)
DataTable table1 = CreateSampleTable1();
DataTable table2 = CreateSampleTable2();
DataTable table3 = CreateSampleTable3();
DataTable resultTable = CombineTables(new DataTable[] { table1, table2, table3 });
DisplayDataTable(resultTable);
static DataTable CreateSampleTable1()
DataTable table = new DataTable("Table1");
table.Columns.Add("Col1");
table.Columns.Add("Col2");
table.Columns.Add("Col3");
table.Columns.Add("Col4");
for (int i = 1; i <= 5; i++)
table.Rows.Add($"T1-R{i}C1", $"T1-R{i}C2", $"T1-R{i}C3", $"T1-R{i}C4");
static DataTable CreateSampleTable2()
DataTable table = new DataTable("Table2");
table.Columns.Add("Col1");
table.Columns.Add("Col2");
table.Columns.Add("Col3");
for (int i = 1; i <= 6; i++)
table.Rows.Add($"T2-R{i}C1", $"T2-R{i}C2", $"T2-R{i}C3");
static DataTable CreateSampleTable3()
DataTable table = new DataTable("Table3");
table.Columns.Add("Col1");
table.Columns.Add("Col2");
table.Columns.Add("Col3");
table.Columns.Add("Col4");
table.Columns.Add("Col5");
for (int i = 1; i <= 2; i++)
table.Rows.Add($"T3-R{i}C1", $"T3-R{i}C2", $"T3-R{i}C3", $"T3-R{i}C4", $"T3-R{i}C5");
static DataTable CombineTables(DataTable[] tables)
DataTable resultTable = new DataTable();
foreach (DataTable table in tables)
foreach (DataColumn column in table.Columns)
if (!resultTable.Columns.Contains(column.ColumnName))
resultTable.Columns.Add(column.ColumnName, column.DataType);
foreach (DataTable table in tables)
if (table.Rows.Count > maxRows)
maxRows = table.Rows.Count;
for (int i = 0; i < maxRows; i++)
DataRow resultRow = resultTable.NewRow();
foreach (DataTable table in tables)
if (i < table.Rows.Count)
for (int j = 0; j < table.Columns.Count; j++)
resultRow[table.Columns[j].ColumnName] = table.Rows[i][j];
resultTable.Rows.Add(resultRow);
static void DisplayDataTable(DataTable table)
foreach (DataColumn column in table.Columns)
Console.Write(column.ColumnName + "\t");
foreach (DataRow row in table.Rows)
foreach (var item in row.ItemArray)
Console.Write(item + "\t");