如何在一个DataTable表格中随机删除一行数据

时间:2022-09-23 08:34:53
C#  一个表格*有N行数据,如何在一个表格中随机删除一行数据,然后将删除的这行数据再随机插入表格中。。说白了,我就是想如何将这行数据随机将其在表格中的位置更换。

20 个解决方案

#1


生成随机数会吗?
使用random类,生成一个从0到行数-1的随机数,表示从哪行移走
再生成一个,表示插入哪里

#2


你可以不删除再插入,直接修改行号即可

#3


引用 2 楼 Z65443344 的回复:
你可以不删除再插入,直接修改行号即可

能否简单写一下代码,涉及哪几个变量

#4


引用 1 楼 Z65443344 的回复:
生成随机数会吗?
使用random类,生成一个从0到行数-1的随机数,表示从哪行移走
再生成一个,表示插入哪里

随机数会,

#5


 Random rd = new Random();
 int row1;
  row1 = rd.Next(0, dtable.Rows.Count);

#6


其实就是加一个"行号"列,然后里面填充随机数,然后根据行号做个排序

#7



 Random rd = new Random();
            int row1;
            row1 = rd.Next(0, dt.Rows.Count);
            dt.Rows.InsertAt(dt.Rows[row1], row1);

#8


在你的数据源对象中加一个行号属性,根据它自定义排序

#9


随机打乱顺序而已..


var NewDt=dt.AsEnumerable().OrderBy(d => Guid.NewGuid()).CopyToDataTable();

#10


Quote: 引用 6 楼 Z65443344 的回复:

其实就是加一个"行号"列,然后里面填充随机数,然后根据行号做个排序[/qu
嗯,这种方法我明白了。。。但是数据太多的话  计算量太大了。。可否这样:我先随机产生两个随机数M,N,然后复制第M行数据,然后再将M行数据删除,将这行数据插入到产生的第N行的位置。。插入的函数是哪个??

#11


数据很大?

试试这个


dt.AsEnumerable().AsParallel().OrderBy(d => Guid.NewGuid()).CopyToDataTable();


如何在一个DataTable表格中随机删除一行数据


#12


删除是remove
插入是insertAt

#13


   Random rd = new Random();
            int row1,row2;//,row3,row4;
            
                  row1 = rd.Next(0, dtable.Rows.Count-1);
                  row2 = rd.Next(0, dtable.Rows.Count-1);
                  DataRow r1 = dtable.NewRow();
                  if (row1 != row2)
                  {
                      r1.ItemArray = dtable.Rows[row1].ItemArray;
                      dtable.Rows.Remove(row1);
                      dtable.Rows.InsertAt(r1, row2);
                  }
这样写有问题吗???会出现报错。错误 无法从“int”转换为“System.Data.DataRow”???如何更改??

#14


引用 12 楼 Z65443344 的回复:
删除是remove
插入是insertAt

 Random rd = new Random();
            int row1,row2;//,row3,row4;
            
                  row1 = rd.Next(0, dtable.Rows.Count-1);
                  row2 = rd.Next(0, dtable.Rows.Count-1);
                  DataRow r1 = dtable.NewRow();
                  if (row1 != row2)
                  {
                      r1.ItemArray = dtable.Rows[row1].ItemArray;
                      dtable.Rows.Remove(row1);
                      dtable.Rows.InsertAt(r1, row2);
                  }
这样写有问题吗???会出现报错。错误 无法从“int”转换为“System.Data.DataRow”???如何更改??

#15


引用 11 楼 diaodiaop 的回复:
数据很大?

试试这个


dt.AsEnumerable().AsParallel().OrderBy(d => Guid.NewGuid()).CopyToDataTable();


如何在一个DataTable表格中随机删除一行数据


你的好高级,我就会些基本的,慢慢看,看看能看懂么

#16



            DataTable dt = new DataTable("");
            dt.Columns.Add("id", typeof(int));
            dt.Columns.Add("name", typeof(string));
            dt.Rows.Add(1, "小明111");
            dt.Rows.Add(2, "小明222");
            dt.Rows.Add(3, "小明333");
            dt.Rows.Add(4, "小明444");
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                Console.WriteLine(dt.Rows[i][0].ToString() +"__"+ dt.Rows[i][1].ToString());
            }
            DataTable newDt = dt.AsEnumerable().AsParallel().OrderBy(d => Guid.NewGuid()).CopyToDataTable();
            for (int i = 0; i < newDt.Rows.Count; i++)
            {
                Console.WriteLine(newDt.Rows[i][0].ToString() + "__" + newDt.Rows[i][1].ToString());
            }



引用
1__小明111
2__小明222
3__小明333
4__小明444


2__小明222
3__小明333
1__小明111
4__小明444


引用
说白了,我就是想如何将这行数据随机将其在表格中的位置更换。 


因为我看到你说把随机的一行 扔到随机的位置..我个人理解的话 就是把表格打乱了 不知道我理解的对不对..

当然我这是全部,而你只要一个 是吗?

#17


引用 16 楼 diaodiaop 的回复:

            DataTable dt = new DataTable("");
            dt.Columns.Add("id", typeof(int));
            dt.Columns.Add("name", typeof(string));
            dt.Rows.Add(1, "小明111");
            dt.Rows.Add(2, "小明222");
            dt.Rows.Add(3, "小明333");
            dt.Rows.Add(4, "小明444");
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                Console.WriteLine(dt.Rows[i][0].ToString() +"__"+ dt.Rows[i][1].ToString());
            }
            DataTable newDt = dt.AsEnumerable().AsParallel().OrderBy(d => Guid.NewGuid()).CopyToDataTable();
            for (int i = 0; i < newDt.Rows.Count; i++)
            {
                Console.WriteLine(newDt.Rows[i][0].ToString() + "__" + newDt.Rows[i][1].ToString());
            }



引用
1__小明111
2__小明222
3__小明333
4__小明444


2__小明222
3__小明333
1__小明111
4__小明444


Quote:

说白了,我就是想如何将这行数据随机将其在表格中的位置更换。 


因为我看到你说把随机的一行 扔到随机的位置..我个人理解的话 就是把表格打乱了 不知道我理解的对不对..

当然我这是全部,而你只要一个 是吗?

嗯  我只要随机变动一行的位置。。其他不变。我先看看你的学习学习吧

#18


引用 13 楼 zcy_1229 的回复:
   Random rd = new Random();
            int row1,row2;//,row3,row4;
            
                  row1 = rd.Next(0, dtable.Rows.Count-1);
                  row2 = rd.Next(0, dtable.Rows.Count-1);
                  DataRow r1 = dtable.NewRow();
                  if (row1 != row2)
                  {
                      r1.ItemArray = dtable.Rows[row1].ItemArray;
                      dtable.Rows.Remove(row1);
                      dtable.Rows.InsertAt(r1, row2);
                  }
这样写有问题吗???会出现报错。错误 无法从“int”转换为“System.Data.DataRow”???如何更改??

DataRow dr=dtable.NewRow();
for(int i=0;i<dtable.Columns.Count;i++)
{
dr[i]=dtable.Rows[row1][i];
}
dtable.Rows.Remove(row1);
dtable.Rows.InsertAt(row2, dr);

#19


row1,row2是int类型
应该用dtable.Rows.RemoveAt(row1);

#20


引用 19 楼 Z65443344 的回复:
row1,row2是int类型
应该用dtable.Rows.RemoveAt(row1);



明白了。。谢谢。。

#1


生成随机数会吗?
使用random类,生成一个从0到行数-1的随机数,表示从哪行移走
再生成一个,表示插入哪里

#2


你可以不删除再插入,直接修改行号即可

#3


引用 2 楼 Z65443344 的回复:
你可以不删除再插入,直接修改行号即可

能否简单写一下代码,涉及哪几个变量

#4


引用 1 楼 Z65443344 的回复:
生成随机数会吗?
使用random类,生成一个从0到行数-1的随机数,表示从哪行移走
再生成一个,表示插入哪里

随机数会,

#5


 Random rd = new Random();
 int row1;
  row1 = rd.Next(0, dtable.Rows.Count);

#6


其实就是加一个"行号"列,然后里面填充随机数,然后根据行号做个排序

#7



 Random rd = new Random();
            int row1;
            row1 = rd.Next(0, dt.Rows.Count);
            dt.Rows.InsertAt(dt.Rows[row1], row1);

#8


在你的数据源对象中加一个行号属性,根据它自定义排序

#9


随机打乱顺序而已..


var NewDt=dt.AsEnumerable().OrderBy(d => Guid.NewGuid()).CopyToDataTable();

#10


Quote: 引用 6 楼 Z65443344 的回复:

其实就是加一个"行号"列,然后里面填充随机数,然后根据行号做个排序[/qu
嗯,这种方法我明白了。。。但是数据太多的话  计算量太大了。。可否这样:我先随机产生两个随机数M,N,然后复制第M行数据,然后再将M行数据删除,将这行数据插入到产生的第N行的位置。。插入的函数是哪个??

#11


数据很大?

试试这个


dt.AsEnumerable().AsParallel().OrderBy(d => Guid.NewGuid()).CopyToDataTable();


如何在一个DataTable表格中随机删除一行数据


#12


删除是remove
插入是insertAt

#13


   Random rd = new Random();
            int row1,row2;//,row3,row4;
            
                  row1 = rd.Next(0, dtable.Rows.Count-1);
                  row2 = rd.Next(0, dtable.Rows.Count-1);
                  DataRow r1 = dtable.NewRow();
                  if (row1 != row2)
                  {
                      r1.ItemArray = dtable.Rows[row1].ItemArray;
                      dtable.Rows.Remove(row1);
                      dtable.Rows.InsertAt(r1, row2);
                  }
这样写有问题吗???会出现报错。错误 无法从“int”转换为“System.Data.DataRow”???如何更改??

#14


引用 12 楼 Z65443344 的回复:
删除是remove
插入是insertAt

 Random rd = new Random();
            int row1,row2;//,row3,row4;
            
                  row1 = rd.Next(0, dtable.Rows.Count-1);
                  row2 = rd.Next(0, dtable.Rows.Count-1);
                  DataRow r1 = dtable.NewRow();
                  if (row1 != row2)
                  {
                      r1.ItemArray = dtable.Rows[row1].ItemArray;
                      dtable.Rows.Remove(row1);
                      dtable.Rows.InsertAt(r1, row2);
                  }
这样写有问题吗???会出现报错。错误 无法从“int”转换为“System.Data.DataRow”???如何更改??

#15


引用 11 楼 diaodiaop 的回复:
数据很大?

试试这个


dt.AsEnumerable().AsParallel().OrderBy(d => Guid.NewGuid()).CopyToDataTable();


如何在一个DataTable表格中随机删除一行数据


你的好高级,我就会些基本的,慢慢看,看看能看懂么

#16



            DataTable dt = new DataTable("");
            dt.Columns.Add("id", typeof(int));
            dt.Columns.Add("name", typeof(string));
            dt.Rows.Add(1, "小明111");
            dt.Rows.Add(2, "小明222");
            dt.Rows.Add(3, "小明333");
            dt.Rows.Add(4, "小明444");
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                Console.WriteLine(dt.Rows[i][0].ToString() +"__"+ dt.Rows[i][1].ToString());
            }
            DataTable newDt = dt.AsEnumerable().AsParallel().OrderBy(d => Guid.NewGuid()).CopyToDataTable();
            for (int i = 0; i < newDt.Rows.Count; i++)
            {
                Console.WriteLine(newDt.Rows[i][0].ToString() + "__" + newDt.Rows[i][1].ToString());
            }



引用
1__小明111
2__小明222
3__小明333
4__小明444


2__小明222
3__小明333
1__小明111
4__小明444


引用
说白了,我就是想如何将这行数据随机将其在表格中的位置更换。 


因为我看到你说把随机的一行 扔到随机的位置..我个人理解的话 就是把表格打乱了 不知道我理解的对不对..

当然我这是全部,而你只要一个 是吗?

#17


引用 16 楼 diaodiaop 的回复:

            DataTable dt = new DataTable("");
            dt.Columns.Add("id", typeof(int));
            dt.Columns.Add("name", typeof(string));
            dt.Rows.Add(1, "小明111");
            dt.Rows.Add(2, "小明222");
            dt.Rows.Add(3, "小明333");
            dt.Rows.Add(4, "小明444");
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                Console.WriteLine(dt.Rows[i][0].ToString() +"__"+ dt.Rows[i][1].ToString());
            }
            DataTable newDt = dt.AsEnumerable().AsParallel().OrderBy(d => Guid.NewGuid()).CopyToDataTable();
            for (int i = 0; i < newDt.Rows.Count; i++)
            {
                Console.WriteLine(newDt.Rows[i][0].ToString() + "__" + newDt.Rows[i][1].ToString());
            }



引用
1__小明111
2__小明222
3__小明333
4__小明444


2__小明222
3__小明333
1__小明111
4__小明444


Quote:

说白了,我就是想如何将这行数据随机将其在表格中的位置更换。 


因为我看到你说把随机的一行 扔到随机的位置..我个人理解的话 就是把表格打乱了 不知道我理解的对不对..

当然我这是全部,而你只要一个 是吗?

嗯  我只要随机变动一行的位置。。其他不变。我先看看你的学习学习吧

#18


引用 13 楼 zcy_1229 的回复:
   Random rd = new Random();
            int row1,row2;//,row3,row4;
            
                  row1 = rd.Next(0, dtable.Rows.Count-1);
                  row2 = rd.Next(0, dtable.Rows.Count-1);
                  DataRow r1 = dtable.NewRow();
                  if (row1 != row2)
                  {
                      r1.ItemArray = dtable.Rows[row1].ItemArray;
                      dtable.Rows.Remove(row1);
                      dtable.Rows.InsertAt(r1, row2);
                  }
这样写有问题吗???会出现报错。错误 无法从“int”转换为“System.Data.DataRow”???如何更改??

DataRow dr=dtable.NewRow();
for(int i=0;i<dtable.Columns.Count;i++)
{
dr[i]=dtable.Rows[row1][i];
}
dtable.Rows.Remove(row1);
dtable.Rows.InsertAt(row2, dr);

#19


row1,row2是int类型
应该用dtable.Rows.RemoveAt(row1);

#20


引用 19 楼 Z65443344 的回复:
row1,row2是int类型
应该用dtable.Rows.RemoveAt(row1);



明白了。。谢谢。。

#21