有两个DataTable,假设为DT1和DT2,在DT1中“编号”列有三个1,三个2,三个3我想通过它的编号,把编号相同的假设所有编号为2的行取出来给DT2,于是我用了一个for循环将DT1进行删除所有不等于2的行删除掉,剩下的则为编号为2的,可是出错了,代码如下:
DataTable DT1 = new DataTable(); DT1.Columns.Add("编号",typeof(int));
DT1.Columns.Add("内容",typeof(string));DataRow rw1 = DT1.NewRow();
rw1[0] = 1;
rw1[1] = "北京";
DT1.Rows.Add(rw1);DataRow rw2 = DT1.NewRow();
rw2[0] = 1;
rw2[1] = "上海";
DT1.Rows.Add(rw2);DataRow rw3 = DT1.NewRow();
rw3[0] = 1;
rw3[1] = "天津";
DT1.Rows.Add(rw3);DataRow rw4 = DT1.NewRow();
rw4[0] = 2;
rw4[1] = "武汉";
DT4.Rows.Add(rw4);DataRow rw5 = DT1.NewRow();
rw5[0] = 2;
rw5[1] = "广州";
DT1.Rows.Add(rw5);DataRow rw6 = DT1.NewRow();
rw6[0] = 2;
rw6[1] = "深圳";
DT1.Rows.Add(rw6);DataRow rw7 = DT1.NewRow();
rw7[0] = 3;
rw7[1] = "重庆";
DT1.Rows.Add(rw7);DataRow rw8 = DT1.NewRow();
rw8[0] = 3;
rw8[1] = "青岛";
DT1.Rows.Add(rw8);DataRow rw9 = DT1.NewRow();
rw9[0] = 3;
rw9[1] = "沈阳";
DT1.Rows.Add(rw9);for(int i=0;i<DT1.Rows.Count;i++)
{
if((int)DT1.Rows[i][0] != 2)
{
DT1.Rows[i].RemoveAt(i);
}
}
DataTable DT2 = new DataTable();
DT2 = DT1.Copy();这样子会使DT1少删除很多行,我分析是因为DT1在RemoveAt(i)之后本身的Count会减少,而且后面的几项index也会前移,因此是错误的,请问应该怎么改正,谢谢!!!
DataTable DT1 = new DataTable(); DT1.Columns.Add("编号",typeof(int));
DT1.Columns.Add("内容",typeof(string));DataRow rw1 = DT1.NewRow();
rw1[0] = 1;
rw1[1] = "北京";
DT1.Rows.Add(rw1);DataRow rw2 = DT1.NewRow();
rw2[0] = 1;
rw2[1] = "上海";
DT1.Rows.Add(rw2);DataRow rw3 = DT1.NewRow();
rw3[0] = 1;
rw3[1] = "天津";
DT1.Rows.Add(rw3);DataRow rw4 = DT1.NewRow();
rw4[0] = 2;
rw4[1] = "武汉";
DT4.Rows.Add(rw4);DataRow rw5 = DT1.NewRow();
rw5[0] = 2;
rw5[1] = "广州";
DT1.Rows.Add(rw5);DataRow rw6 = DT1.NewRow();
rw6[0] = 2;
rw6[1] = "深圳";
DT1.Rows.Add(rw6);DataRow rw7 = DT1.NewRow();
rw7[0] = 3;
rw7[1] = "重庆";
DT1.Rows.Add(rw7);DataRow rw8 = DT1.NewRow();
rw8[0] = 3;
rw8[1] = "青岛";
DT1.Rows.Add(rw8);DataRow rw9 = DT1.NewRow();
rw9[0] = 3;
rw9[1] = "沈阳";
DT1.Rows.Add(rw9);for(int i=0;i<DT1.Rows.Count;i++)
{
if((int)DT1.Rows[i][0] != 2)
{
DT1.Rows[i].RemoveAt(i);
}
}
DataTable DT2 = new DataTable();
DT2 = DT1.Copy();这样子会使DT1少删除很多行,我分析是因为DT1在RemoveAt(i)之后本身的Count会减少,而且后面的几项index也会前移,因此是错误的,请问应该怎么改正,谢谢!!!
解决方案 »
- 讨论:关于通信(socket,serialport……)
- 在ESX上用SDK(c#)的CreateFolder方法
- 开发自定义控件
- c# winform showdialog()导致主窗体最小化问题.
- webBrowser问题
- c#遍历我的电脑的问题!
- 得到类的名称
- 怎样调用DB.cs的类里面的东西?连接数据库问题
- 好久没有上来了,上来交交朋友。认识新朋友,再会老朋友
- 我这样引用有错误吗?using System.Windows.Forms.Message;
- 在网上下载一个ASP.NET4.0版本的系统,要怎么修改裁可以在自己的电脑运行?
- webservice的winform局域网软件在多人同时访问是出现查询sql2000数据表混乱
for(int i=DT1.Rows.Count-1;i>=0;i--)
楼主自己操作下
{
if ((int)DT1.Rows[i][0] != 2)
{
DT1.Rows[i].Delete();
}
}
DataTable DT2 = DT1.Clone(); for (int i = 0; i < DT1.Rows.Count; i++)
{
if ((int)DT1.Rows[i][0] == 2)
{
DataRow dr = DT2.NewRow();
DT1.Rows[i].ItemArray.CopyTo(dr.ItemArray,0);
DT2.Rows.Add(dr);
}
}