【发布时间】:2017-03-13 18:23:00
【问题描述】:
我有一个从 Excel 工作表填充的DataTable,现在需要根据该列中的内容来操作数据。
例如,如果ColumnA 包含数字 1、2 和 3 的组合,则保持该列不变,但如果 ColumnA 没有这种组合,则应删除该列。
现在如果我使用dataTable.Select("") 方法就会出现问题。
我不知道列名以及如何在所有列中实现这一点,并在列中实际应用 where 子句。这种操作都是基于列而不是行。
如果有人有建议或可以指出正确的方向,请做。
编辑 下面是使用 ExcelSheet 填充 DataTable 的代码。
ds = new DataSet();
using (OleDbConnection con = new OleDbConnection(Excel07ConString))
{
using (OleDbCommand cmd = new OleDbCommand())
{
using (OleDbDataAdapter oda = new OleDbDataAdapter())
{
cmd.Connection = con;
con.Open();
DataTable dtExcelSchema = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
for (int i = 0; i < dtExcelSchema.Rows.Count; i++)
{
sheetName = dtExcelSchema.Rows[i]["TABLE_NAME"].ToString();
DataTable dt = new DataTable();
cmd.Connection = con;
cmd.CommandText = "SELECT * FROM [" + sheetName + "]";
oda.SelectCommand = cmd;
oda.Fill(dt);
dt.TableName = sheetName;
comboBoxData.Add(sheetName.Replace("$", ""));
ds.Tables.Add(dt);
}
}
}
}
【问题讨论】:
-
是未命名的列,因为它们的名称不是从 Excel 中的标题行传输的,还是您无法从
DataTable.Columns获取它们?显示您到目前为止编写的代码可能会有所帮助。 -
@dlatikay 列已命名,但最初在填充数据表后,我无法说出列的名称和数量。而且我不想硬编码这些名称,因为 Excel 工作表有不同的名称和格式。所以我们需要盲目地研究它们。我将用代码编辑问题。
-
同一组规则是否适用于每一列的内容?那么它只是意味着迭代
foreach(var column in dataTable.Columns) { ... },并使用循环中的列名动态构建您的查询 -
@dlatikay 是的一组规则适用于所有列。
-
好的。基本概念很清楚,还有一件事:当您谈论“数字 1、2、3 的组合”时,您会在单元格中寻找它吗?并在以下情况下删除整个列:全部匹配/不匹配/某些匹配?
标签: c# .net winforms datatable