如果是通过鼠标进入行的,可以通过DataGrid.HitTest方法返回HitTestInfo,通过HitTestInfo.Type属性得到当前单击的是Cell,还是其它部分,如果是Cell,可以通过HitTestInfo.Row来获得鼠标单击的行,这样就可以操作了最好放在MouseDown这个事件中,因为这个事件返回MouseEventErgs,可以访问鼠标当前的X,Y,通过这两个参数来调用HitTest方法

解决方案 »

  1.   

    try thisDataRow row = new DataRow();
    int newrowIndex= this.dataGrid1.CurrentRowIndex-1;
    ds.Tables[0].Rows.InsertAt(row,newrowIndex);
    this.dataGrid1.CurrentRowIndex= newrowIndex;
      

  2.   

    删除光标所在的行的数据,但是不要从数据库中删除,只要当我update之后才真正的删除.
    dataset本来就是这样的
      

  3.   

    ds.Tables[0].Rows.InsertAt(row,newrowIndex);
    Table[0]是什么意思呢?
      

  4.   

    你update的时候删除了
    Tables[0]是第一张表,也可以Tables["tablename"]
      

  5.   

    DataRow row = new DataRow(); 编译不通过:
    Winform.cs(681): No overload for method 'DataRow' takes '0' arguments是什么意思呀?
      

  6.   

    DataRow row = ds.Tables[0].NewRow()
      

  7.   

    1. ds.Tables[0].Rows.InsertAt(row,newrowIndex);
    执行完之后提示说某个列的数据不能为NULL,难道我非要给它填入数据吗?就不能像最后一个空行那样虽然没有数据也不出错吗?2,如果this.dataGrid1.CurrentRowIndex = 0 就是说如果光标在第一行,那么this.dataGrid1.CurrentRowIndex - 1 不就是 -1了吗?这不就出错了吗?怎么解决呀?
      

  8.   

    在指定位置插入我不会,但删除指定行我是经常做的,有两个方法,一种比较麻烦,首先通过DataGrid的CurrentCellChanged属性找到当前datagrid的行,假设为row,然后通过datagrid[row,主键所在的列].ToString()得到当前主键,在对应的DataSet中通过foreach找到dataset中该主键所在的行,删除掉就可以了,如果datagrid没有排序(通过单击列标题),则datagrid的当前行号和dataset的行是对应的,排序后,datagrid的前后顺序变了,而dataset去没有变,因此,最好通过查找来确定当前行。
    第二个办法,将主键绑到一个文本框或标签等控件上,根据绑定控件的TEXT属性就知道当前主键了,然后在dataset中找到该行,删除即可。
      

  9.   

    顺便说我一下,我的DataGrid总是和DataSet绑定的。
      

  10.   

    to: gatr()
    我是使用下面这个语句就删除了我想删除的行,我没有使用DataSet,所以没有出现我点击列头排序之后删错行的问题!. :)
    dataView1.Delete(dataGrid1.CurrentRowIndex);
      

  11.   

    那你就不要减1了,直接再当前行的位置插入吧,不过datagrid会自动会你排序的,看上去并不是再当前位置
      

  12.   

    to:
    1. ds.Tables[0].Rows.InsertAt(row,newrowIndex);
    执行完之后提示说某个列的数据不能为NULL,难道我非要给它填入数据吗?就不能像最后一个空行那样虽然没有数据也不出错吗?这个问题怎么办?
      

  13.   


    在Validating事件里
    private void dataGrid1_Validating(object sender, System.ComponentModel.CancelEventArgs e)
    {
    e.Cancel;
    }
    控制一下看行不行
      

  14.   

    用默认值
     this.dataGrid1.DataSource = this._dataSet.Tables["orders"]; 
     
         .... 
     
         .... 
     
         this._dataSet.Tables["Orders"].Columns[1].DefaultValue = "CustID"; // default value for column 1 
     
         this._dataSet.Tables["Orders"].Columns["OrderDate"].DefaultValue = DateTime.Now; // default value for OrderDate column 
     
      

  15.   

    DataRow row = ds.Tables[0].NewRow()
    row["name"]="";
    row["id"]="";
    ds.Tables[0].Rows.add(row);
    就可以得到一个空行了。
      

  16.   

    用绑定不可以吗?将datagrid绑定到dataset中的表中,这样每次单击datagrid中的一行是就会移动到当前记录然后再执行插入、删除操作不行吗?关注