dgv_问题绑定了 aDataSet.DataSet1.Tables[0],不知道怎么得到 Tables[0] 的当前行(有当前行吗?)于是我的代码:int i = dgv_问题.CurrentRow.Index;
if (i < 0) return;aDataSet.DataSet1.Tables[0].Rows.RemoveAt(i); //关键是这句对不对
if (aDataSet.updateData() < 0) MessageBox.Show("删除出错"); //通过 ada 进行更新看上去很危险,dgv 的当前行索引和table的一样吗?
删除绑定过的 dataGridView 当前行的代码怎么写呢?

解决方案 »

  1.   

    当前行的意思是当前选择的行吗?如果是,那最好当前选择行,当然操作前都最好判断一下
    至于“删除绑定过的 dataGridView 当前行的代码怎么写呢?”因为列表和数据源的索引都是从0开始的,当然各个程序处理可能不一样
    总之,删除表的行是最本质的,毕竟dataGridView的源是表
      

  2.   

    int i = dgv_问题.CurrentRow.Index; 
    aDataSet.DataSet1.Tables[0].Rows.RemoveAt(i); //关键是这句对不对 这样当然很危险!
    只要你的DataGridView一排序,下标和DataSet就不一样了.你应该在用户操作完之后,再更新到DataSet,而不是每操作一行就更新一次.
    要更新DataSet时,直接把DataGridView绑定的数据源保存回去即可:
    aDataSet.DataSet1.Tables[0]=dataGridView1.DataSource as DataTable;
      

  3.   

    我也想删除table[0]的行,再更新到dgv,关键是不知道怎样得到dgv当前行对应的talbe[0]的行。遍历?
      

  4.   

    MARK
      

  5.   

    现在找到一个方法,设置 tables[0] 的主键,然后从dgv查到主键值,Find 即可得到 talbes[0] 的行。
    还有其他更简单的办法吗?
      

  6.   

    还有一点需要说明,
    aDataSet.DataSet1.Tables[0].Rows.RemoveAt(i)
    这种方法虽然从界面上实现了删除,但是无法更新删除数据库,必须用 row 的Delete()做标记,再更新。这个问题让我郁闷了n分钟,以前一直用自动的三层代码来直接用 sql 更新,初用 ada 的更新方法,多学习:)
      

  7.   


    DataTable绑定到DataGridView之后,只要DataTable改动(增删改),DataGridView亦会跟着改动.
    Adapter的Update方法,通过判断每一行的State标记来执行相关的操作,若用RomoveAt,即是物理删除内存表中的行,当然更新不回数据库.正确的方法是,删除内存表的行时,只要更新它的状态为Deleted即可