我要的是该记录在dataset里面的row,不是在datagrid里面的。这两个row不一定相等。

解决方案 »

  1.   

    怎样能取得datagrid里面显示的记录的总数?
      

  2.   

    困扰我好几天了,解决这个问题,我的思路是这样的:先取得datagrid里面所有记录的总数,然后for或者foreach循环,逐一判断isselect(),再把被选中的记录在dataset里面的记录号找出来。大虾们帮帮忙吧。
      

  3.   

    到底怎样才能取得选中的datagrid记录对应在dataset.datatable里面的记录编号?
      

  4.   

    为什么要固执地用记录编号呢
    你用主键的话可以取得行
    就算取得了
    也不能这样获得行号: Table.Rows.Indexof(dataRow)
    但真的不明白你为什么要固执地用记录编号呢?
    取得行就行了呀
      

  5.   

    其实我的目的就是将找到的row删除掉,我对主键不太熟,不知道应该怎么用,不过在数据库里面建表的时候设置了主键。
      

  6.   

    删除一行有很多办法的
    1 dataRow.Delete();
    2 dataTable.Rows.RemoveAt(dataRow);
    3 BindingContext[dataSource,dataMember].RemoveAt(n)
    4 CurrencyManager cm=BindingContext[dataSource,dataMember] as CurrencyManager;
     4.1(cm.List as IBindingList ).RemoveAt(cm.position);
     4.2(cm.List as IBindingList ).Remove(dataRow);
      

  7.   

    我知道这些方法,但前提是我得先找到要删除行在datatable里的row,我现在就是在找这个,怎样能得到当前datagrid里面某一行在datatable里面的row?
      

  8.   

    1 . DataGrid.HitTestInfo info = this.HitTest(e.X, e.Y);  //info.Row
    2 .
    ArrayList drs=new ArrayList();
    CurrencyManager cm=BindingContext[dataSource,dataMember] as CurrencyManager;
       for(int i =0 ;i <cm.List.Count ;i++)                 //cm.List.Count==格子所显示的行数
          if (dataGrid.IsSelected (i))                      //如果选中了
    drs.add ((cm.List (i) as  DataRowView ).Row)   //list中每一个元素是一个IBindListreturn drs;          //返回在dataGrid中选择了的DataRow
      

  9.   

    同意alias88() 的,所谓的主键就是可以唯一标识资料的东东,比如流水号啊什么的都可以.既然你知道了某一行,自然知道这一行的主键,就可以通过DataView的RowFilter或DataTable的Select方法获得row啊.
      

  10.   

    =====================================================================
    1 . DataGrid.HitTestInfo info = this.HitTest(e.X, e.Y);  //info.Row
    2 .
    ArrayList drs=new ArrayList();
    CurrencyManager cm=BindingContext[dataSource,dataMember] as CurrencyManager;
       for(int i =0 ;i <cm.List.Count ;i++)                 //cm.List.Count==格子所显示的行数
          if (dataGrid.IsSelected (i))                      //如果选中了
    drs.add ((cm.List (i) as  DataRowView ).Row)   //list中每一个元素是一个IBindListreturn drs;          //返回在dataGrid中选择了的DataRow
    =========================================================
    大虾的方法不错,但是在update以前再次执行此代码就会报错了,因为一旦运行过一次以后,datagrid里面的row就不等于datatable里面的row了。只有想办法得到要删除的数据在datatable里面的真实row才可以。
      

  11.   

    mydatagrid[mydatagrid.CurrentCell.RowNumber,mydatagrid.CurrentCell.ColumnNumber]这样就能取得当前被选中的mydatagrid.CurrentCell.RowNumber行mydatagrid.CurrentCell.ColumnNumber列的数据接下来怎么做.............楼主明白了吗?
      

  12.   

    我还是不太明白,取得了数据又如何?到datatable里面去搜索吗?但是如果数据被修改过然后删除,那样不是就找不到了吗?
      

  13.   

    比如说 你在DataGrid中选中了你想删除的那一行 这一行的第一列是ID列 或姓名列 然后用我的方法取行他的值 然后从头扫描你的那个表 吧符合条件的(刚才在datagrid中选出的那个值)行删去
      

  14.   

    后台表 和显示的DataGrid 里的数据必须要保持一致的 也就是说如果后台表里的数据改变了必须马上反影到DataGrid中
      

  15.   

    这个事当然,但是后台表里面只能做删除标记,不能真正删除,否则再update的时候要删除的数据不能被删除。就是说在删除的时候,后台表里面实际的记录要比datagrid里面显示的多。
      

  16.   

    能不能用findrow试试,找到后findRow.Delete();
      

  17.   

    findrow是什么意思?
    我觉得,一条记录不论我怎么改,哪怕我把它的所有字段的内容都作修改,也不论它在datagrid里面是什么位置,是第一条记录还是最后一条,他在datatable里面的位置是不会变的,我就是想找到这个位置。
      

  18.   

    在一条记录的所有字段,包括主键字段的内容都被修改过以后,还能通过什么来findrow确定它在datatable里面的位置?
      

  19.   

    "其实我的目的就是将找到的row删除掉," 
    你一定要在datatable中才能删除么
    取得在grid的row不就可以删了吗
    无论datagrid的数据源是dataset,还是datatable等,最终都是绑定到一个视图,这个视图里的东东才是你要操纵的,显示了5个出来,可你偏偏要在50个中去找,我是不会做这种曲里拐弯的事
      

  20.   

    多谢alias大虾,我用datarow的方法解决了,虽然不是我最理想的方法,但总算是搞定。