for (int j = 2; j < dt.Columns.Count; j++) { if (dt.Columns[j].ColumnName.Contains(keyWord)) { dt.Columns.Remove(dt.Columns[j]); } } return dt;
用以上代码进行列的remove操作,可是执行过后还是好多列还是存在,貌似只删除了第一次循环的列,应该怎么把符合条件的全remove呢
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Data; namespace ConsoleApplication10 { class Program { static void Main(string[] args) { DataTable dt = new DataTable(); dt.Columns.Add(new DataColumn("Name1", typeof(string))); dt.Columns.Add(new DataColumn("Name2", typeof(string))); dt.Columns.Add(new DataColumn("Name3", typeof(string))); dt.Columns.Add(new DataColumn("Name4", typeof(string))); dt.Columns.Add(new DataColumn("Name5", typeof(string))); dt.Columns.Add(new DataColumn("Age", typeof(string))); dt.Columns.Add(new DataColumn("Address", typeof(string))); List<DataColumn> list = new List<DataColumn>(); for (int i = 0; i < dt.Columns.Count; i++) { if (dt.Columns[i].ColumnName.Contains("Name")) { list.Add(dt.Columns[i]); } } for (int i = 0; i < list.Count; i++) { dt.Columns.Remove(list[i]); } } } }
已经解决了,谢谢你给出一个这么完整的例子
你要Remove的话,得从高往低走。
for (int j = dt.Columns.Count-1; j=2; j--)
再删除过程中:dt.Columns.Count是不断变化的,数据的索引[j]也是不断变化的,可以从后往前删。
for(int j=dt.Columns.Count; j >= 2; j --)
{
//do Something.
}
造化,造化,楼上两位说的对,dt.Columns.Count在remove后就变了,不能当准了。