da(datagridview )和ds(dataset)绑定了
现在要做一个删除当前选中行的操作
ds.Tables[0].Rows[dataGridView1.CurrentRow .Index].Delete();
sda.Update(ds, "Customers");   //然后更新
这样有问题吗?
这么是可以,可是一旦点击da的列标题进行排序后,那么da和ds的行就不对应了,删除的就不是要删除的行了,这个得如何解决?
请高人指点

解决方案 »

  1.   

    int index = this.dataGridView1.CurrentRow.Index;
     this.dataGridView1.Rows.RemoveAt(index);
    试试
      

  2.   

    你这样是可以,可是如何更新回数据库呢?
    你通过代码来更改da的值,ds是不会随着变的 ,ds不变,就没法更新数据库啊
      

  3.   

    你是用DataAdapter.Update来更新吧那句代码可以将相应的dataSet中的行的状态更改为DataViewRowState.Deleted
      

  4.   

    不对,是我弄错了,可是更新
    原来dataset对dataGridView1 .Rows.RemoveAt(dataGridView1.CurrentRow .Index);可以捕获可是如果是修改行呢?
    dataGridView1.Rows[0].Cells[0].Value = “123”;
    这样做dataset就无法捕获了再用update就不能更新了
    (不是在datagridview里进行编辑,换一种方式,比如比如在另一窗体什么的)
      

  5.   

    不行啊,问题是一点击排序就乱了啊!
    比如没排序前,da的第一行,和排序后da的第一行不一样啊,可是不管da怎么排序,ds的行顺序始终保持不变啊
      

  6.   

    你就你们没遇到过关于排序的吗,排序后的da的顺序就变了啊
    da不是自带的排序功能吗
    而ds 的顺序不会因为da的排序而变化啊
      

  7.   

    DS.Tables[0].Select(" 你的主键='"+this.dataGridView1.Rows[this.dataGridView1.CurrentRow.Index].Cells["你的主键"].Value.ToString()+"'")[0]["color_code"]="xxx";
    试试这个,另外,你可能要把自动排序关闭,自已写sort
      

  8.   

    谢谢了
    我没有写排序事件,并且da不是自动排序,就是如果你点击某个字段的标题后,就按这个字段进行排序teachman_999(有美人兮,见之不忘,一日不见兮,思之如狂) ( 
    你的方法好用
    可是有点蒙,不是很明白,你这个是不是就是把da和ds的主键绑定了,不管da怎么排序,ds都始终和它锁定了?
      

  9.   

    如果你在DataGridView中列的SortMode=Automatic ,
    那么每次对DataGridView的绑定和对相应的绑定数据源的修改,这个控件本身都会自动排序。
    而this.dataGridView1.CurrentRow.Index这条语句并不对应绑定数据源中的顺序,
    所以,我用主键找到绑定数据源中对应的行再进行修改.
      

  10.   

    DataGridView1.CurrentRow.DataBoundItem.delete()
    删除画面选中的行,并且数据源中相对应得行的state为delete
      

  11.   

    实际上你就是要获取当前选择的数据行是吧(DataTable中的索引和DataGridView中的索引因为排序已经打乱了),建议用下面的办法:
            /// <summary>
            /// 从DataGridView的当前选择中,返回所绑定数据源的对应的行
            /// </summary>
            /// <param name="p_DataGridView">指定的DataGridView</param>
            /// <returns>选择的数据行,如果没有选择,返回null</returns>
            public static DataRow GetSeledRowFromDataGridView(DataGridView p_DataGridView)
            {
                DataRow row = null;
                int nIndex = Tools.GetDataGridViewSelIndex(p_DataGridView);
                if (nIndex < 0)
                    return row;            DataGridViewRow drRow = p_DataGridView.Rows[nIndex];
                row = drRow.DataBoundItem as DataRow;
                if (row == null)
                {
                    DataRowView dv = drRow.DataBoundItem as DataRowView;
                    if (dv != null)
                    {
                        row = dv.Row;
                    }            }
                return row;
            }
      

  12.   

    说明一下:
    Tools.GetDataGridViewSelIndex是另外一个函数,获取当前选择DataGridView行,你可以用p_DataGridView.CurrentCell.RowIndex、p_DataGridViewCurrentRow.Index等方式得到