C# 从数据表C中删除列#
Im当前正在将已上载excel文档中的字段映射到数据表。我希望删除未选中的列,但它们仍然显示 这是我的密码:C# 从数据表C中删除列#,c#,database,excel,datatable,C#,Database,Excel,Datatable,Im当前正在将已上载excel文档中的字段映射到数据表。我希望删除未选中的列,但它们仍然显示 这是我的密码: if(DT.Columns.IndexOf("First Name") != -1) DT.Columns["First Name"].ColumnName = "First NameMap"; DT.Columns[mapping.FirstNameColumnId].ColumnName = "First Name";
if(DT.Columns.IndexOf("First Name") != -1)
DT.Columns["First Name"].ColumnName = "First NameMap";
DT.Columns[mapping.FirstNameColumnId].ColumnName = "First Name";
if (DT.Columns.IndexOf("Last Name") != -1)
DT.Columns["Last Name"].ColumnName = "Last NameMap";
DT.Columns[mapping.LastNameColumnId].ColumnName = "Last Name";
if (DT.Columns.IndexOf("Email Address") != -1)
DT.Columns["Email Address"].ColumnName = "Email AddressMap";
DT.Columns[mapping.EmailColumnId].ColumnName = "Email Address";
int ColumnCounter = 0;
foreach(DataColumn column in DT.Columns)
{
if(ColumnCounter != mapping.FirstNameColumnId && ColumnCounter != mapping.LastNameColumnId && ColumnCounter != mapping.EmailColumnId)
{
DT.Columns.Remove(column);
}
}
在调试器中单步执行此代码时,具体在哪里失败?是否输入了foreach循环?其中是否输入了
if
语句?当您在目标列上调用.Remove()
时,它是否已从该对象中删除?那么,问题是什么?代码本身并没有失败。它进入DT.列。删除(列);但excel工作表中的所有原始列仍将显示。我只想让它显示名字、姓氏和电子邮件。您应该注意在foreach中修改Columns集合-为了安全起见,请使用.ToList()进行复制-正如PaulF所说,您不应该在自己的foreach循环中修改集合。您可以像他所说的那样使用副本,也可以使用For循环,但要小心,当从集合中删除某个项时,索引会发生变化。您也可以只使用lambda表达式将列筛选为所需的任何列?是否输入了foreach循环?其中是否输入了if
语句?当您在目标列上调用.Remove()
时,它是否已从该对象中删除?那么,问题是什么?代码本身并没有失败。它进入DT.列。删除(列);但excel工作表中的所有原始列仍将显示。我只想让它显示名字、姓氏和电子邮件。您应该注意在foreach中修改Columns集合-为了安全起见,请使用.ToList()进行复制-正如PaulF所说,您不应该在自己的foreach循环中修改集合。您可以像他所说的那样使用副本,也可以使用For循环,但要小心,当从集合中删除某个项时,索引会发生变化。您还可以使用lambda表达式将列筛选为所需的任何列。
DataTable t;
t.Columns.Remove("columnName");
t.Columns.RemoveAt(columnIndex);