+ -
当前位置:首页 → 问答吧 → 在执行table的remove方法时出现“给定的 DataRow 不在当前的 DataRowCollection 中"

在执行table的remove方法时出现“给定的 DataRow 不在当前的 DataRowCollection 中"

时间:2011-12-09

来源:互联网

C# code
           DataTable dt = m_dtbSelectPerson.Copy();
                    DataRow dr = dt.NewRow();
                    for (int i = 0; i < dt.Rows.Count; i++)
                    {
                        dr[i] = dt.Rows[i];
                    }
                    m_dtbPersonList.Rows.Remove(dr);
                    this.m_objViewer.gridControl1.DataSource = m_dtbPersonList;
                    this.m_objViewer.gridView1.BestFitColumns();
                    m_dtbSelectPerson = m_dtbPersonList.Clone();
                    this.m_objViewer.gridControl3.DataSource = m_dtbSelectPerson;

运行到Remove时出错,m_dtbSelectPerson是在m_dtbPersonList中选出的其中一行。
请大家指点迷津~谢谢!!!

作者: Xiao376720200   发布时间: 2011-12-09

以对问题:
1、dr[i] = dt.Rows[i];
  前者是具体的一个单元值,后者是一行,怎么能这样赋值!
2、m_dtbPersonList.Rows.Remove(dr);
  你没有加入dr,当然在行集合中不存在!
3、m_dtbSelectPerson是在m_dtbPersonList中选出的其中一行
  怎么看m_dtbSelectPerson都不是行,而是一个DataTable

好好看看MSDN,上面有详细例子。。。
 

作者: sdl2005lyx   发布时间: 2011-12-09

额。。更正一下,m_dtbPersonList已经有很多行数据的了,m_dtbSelectPerson是其在其中选出几行来的table,如何在m_dtbPersonList中remove掉m_dtbSelectPerson中相同数据的row呢???

作者: Xiao376720200   发布时间: 2011-12-09

DataRow dr = dt.NewRow();

 m_dtbPersonList.Rows.Remove(dr);

关键是这两句

你想做什么

作者: Sandy945   发布时间: 2011-12-09

相同数据是怎么判定的

作者: Sandy945   发布时间: 2011-12-09

引用 3 楼 sandy945 的回复:
DataRow dr = dt.NewRow();

m_dtbPersonList.Rows.Remove(dr);

关键是这两句

你想做什么

额。。我是想在m_dtbPersonList中remove掉m_dtbSelectPerson中相同数据的row!
DataRow dr = dt.NewRow(),是创建这个表结构的空ROW吧。。。

作者: Xiao376720200   发布时间: 2011-12-09

是啊,你想移除, 那为什么要新建行呢?

作者: Sandy945   发布时间: 2011-12-09

引用 6 楼 sandy945 的回复:
是啊,你想移除, 那为什么要新建行呢?

如何在在m_dtbPersonList中remove掉m_dtbSelectPerson所有的row呢。
两个都是相同的表结构的,m_dtbSelectPerson是在m_dtbPersonList中其中几行row选出来Add进来的

作者: Xiao376720200   发布时间: 2011-12-09

你这描述太绕了。 还是贴数据和图来说把

作者: Sandy945   发布时间: 2011-12-09

引用 8 楼 sandy945 的回复:
你这描述太绕了。 还是贴数据和图来说把


这是界面,我定义了两个table,分别绑定在两个gridview中,上面是未选择的,下面是已选择的。当我选择了一个,在按查询时,是全部查询出来的,那我就要在查询出来的table中删掉已经选择的row,在绑定在上面的gridview中,才不会导致又在次出现了已经选择的联系人。
所以,该怎么解决呢?还是有更好的办法。。。

作者: Xiao376720200   发布时间: 2011-12-09

引用 9 楼 xiao376720200 的回复:
在按查询时,是全部查询出来的,那我就要在查询出来的table中删掉已经选择的row,在绑定在上面的gridview中,才不会导致又在次出现了已经选择的联系人。


看不大懂

作者: ooo7880000   发布时间: 2011-12-09

引用 10 楼 ooo7880000 的回复:
引用 9 楼 xiao376720200 的回复:
在按查询时,是全部查询出来的,那我就要在查询出来的table中删掉已经选择的row,在绑定在上面的gridview中,才不会导致又在次出现了已经选择的联系人。


看不大懂

我有两个gridview,分别绑定两个table,其中一个table是按查询按钮查询出数据库的数据赋值上去的。当我选中gridview中的某一行,确认挑选后,挑选的就走到下面的gridview中了。也就是原来的table中删了选中那行的datarow,而下面绑定的table中就add一个datarow。
当我选择一些联系人后,在按查询按钮时,又重新绑定了数据库到table中,这样的话,我就要在重新绑定的table中删掉在已选择联系人table中的row了。

作者: Xiao376720200   发布时间: 2011-12-09

private DataTable dt2 = new DataTable()
给下面的gridview用

查询里
获取上面的gridview的选择行

先对下面的gridview操作:
将该行加到dt2 ,注意dt2 的null判断,然后对其数据绑定

对上面的gridview数据源移除所选行,对其数据绑定

作者: bearlin081001   发布时间: 2011-12-09

有个问题 : 
  DataRow dr = dt.NewRow();
  for (int i = 0; i < dt.Rows.Count; i++)
  {
  dr[i] = dt.Rows[i];
  }


dr[i] = dt.Rows[i];这句为啥不报错啊?

作者: bearlin081001   发布时间: 2011-12-09

引用 12 楼 bearlin081001 的回复:
private DataTable dt2 = new DataTable()
给下面的gridview用

查询里
获取上面的gridview的选择行

先对下面的gridview操作:
将该行加到dt2 ,注意dt2 的null判断,然后对其数据绑定

对上面的gridview数据源移除所选行,对其数据绑定

我是这么做的,问题是怎么移除??

作者: Xiao376720200   发布时间: 2011-12-09

引用 13 楼 bearlin081001 的回复:
有个问题 : 
  DataRow dr = dt.NewRow();
  for (int i = 0; i < dt.Rows.Count; i++)
  {
  dr[i] = dt.Rows[i];
  }


dr[i] = dt.Rows[i];这句为啥不报错啊?

这些是错误的,更正了!

作者: Xiao376720200   发布时间: 2011-12-09

引用 11 楼 xiao376720200 的回复:
引用 10 楼 ooo7880000 的回复:
引用 9 楼 xiao376720200 的回复:
在按查询时,是全部查询出来的,那我就要在查询出来的table中删掉已经选择的row,在绑定在上面的gridview中,才不会导致又在次出现了已经选择的联系人。


看不大懂

我有两个gridview,分别绑定两个table,其中一个table是按查询按钮查询出数据库的数据赋值上去的。……


清空第二个gridview的数据。clear()方法应该可以,第二个Datatable按查询的时候定义或者实例化就行了,就不会出现你说的这种情况了。 要是理解错误,还请见谅。

作者: ooo7880000   发布时间: 2011-12-09

相关阅读 更多