Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从数据表C中删除列#_C#_Database_Excel_Datatable - Fatal编程技术网

C# 从数据表C中删除列#

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";

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("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);