【问题标题】:Remove Column from Data Table C#从数据表 C# 中删除列
【发布时间】:2018-04-13 17:34:08
【问题描述】:

我目前正在将上传的 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("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.Columns.Remove(column);但仍在显示 excel 表中的所有原始列。我只希望它显示名字、姓氏和电子邮件
  • 您应该注意在 foreach 中修改 Columns 集合 - 为了安全起见,请使用 .ToList() - stackoverflow.com/questions/14413099/…
  • 正如 PaulF 所说,您不应该在自己的 foreach 循环中修改集合。您可以按照他的说法使用副本,或者使用 For 循环,但请注意从集合中删除项目时索引会发生变化。您也可以只使用 lambda 表达式将列过滤为您想要的任何列。

标签: c# database excel datatable


【解决方案1】:
   DataTable t;
   t.Columns.Remove("columnName");
   t.Columns.RemoveAt(columnIndex);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多