核心代碼
private DataTable LoadAndMergeCsv(string file1, string file2) {
var dt1 = CsvToDataTable(file1);
var dt2 = CsvToDataTable(file2);
// 關鍵:列名、順序、類型必須完全一致
dt1.Merge(dt2, false, MissingSchemaAction.Ignore);
return dt1;
}
private DataTable CsvToDataTable(string path) {
var dt = new DataTable();
using (var sr = new StreamReader(path, Encoding.GetEncoding("GB2312"))) {
string header = sr.ReadLine();
if (header == null) return dt;
foreach (var col in header.Split(',')) dt.Columns.Add(col.Trim());
string line;
while ((line = sr.ReadLine()) != null) {
var row = dt.NewRow();
var vals = line.Split(',');
for (int i = 0; i < Math.Min(vals.Length, dt.Columns.Count); i++)
row[i] = vals[i].Trim();
dt.Rows.Add(row);
}
}
return dt;
}
// 綁定
dataGridView1.DataSource = LoadAndMergeCsv("a.csv", "b.csv");
關鍵點
Merge 參數:false 表示不保留變更 (覆蓋),MissingSchemaAction.Ignore 忽略缺失列
- CSV 編碼常為 GB2312/UTF-8,需按實際調整
- 大文件建議用
TextFieldParser (Microsoft.VisualBasic) 或 CsvHelper 庫
替代方案:SQL 查詢合併
// 若 CSV 已導入臨時表
SELECT * FROM TempA
UNION ALL
SELECT * FROM TempB;