- 一张表作为源数据,另一张新表,使用table1.Columns.Add()的方法加入源表的列数据的话会报,字段已属于另一张表。所有使用DataView 获取源数据表的所有数据,在使用ToTable方法把需要的列数据给到另一张表里。这时筛选出来的就是我们需要的表数据了。
- 代码部分
//dtSource源数据表
public static MemoryStream ExportMemoryStream(DataTable dtSource, ExcelConfig excelConfig)
{
int colint = 0;
//新表
DataTable dataTable = new DataTable() ;
List<string> namelist = new List<string>();
int mark = 0;
for (int i = 0; i < dtSource.Columns.Count;i++)
{
if (mark==1) {
//如果匹配上重新获取dtSource的第一个字段匹配
i = 0;
//匹配状态恢复用于下一次的记录
mark = 0;
}
DataColumn column = dtSource.Columns[i];
if (excelConfig.ColumnEntity[colint].Column == column.ColumnName)
{
string[] names = new string[excelConfig.ColumnEntity.Count];
namelist.Add(column.ColumnName);
if (colint == excelConfig.ColumnEntity.Count - 1)
{
for (int a = 0; a < namelist.Count; a++)
{
names[a] = namelist[a];
}
//获取表所有数据
DataView view = dtSource.DefaultView;
//要保留下来的列
dataTable = view.ToTable(false, names);
break;
// dtSource.Columns.Remove(column.ColumnName);
}
mark = 1;//字段匹配上了
if (colint < excelConfig.ColumnEntity.Count - 1)
{
colint++;
}
}
}
dtSource = dataTable;
}