首先你这样的思路肯定就行不通的。你想想,DataGrid只不过是个数据绑定的控件而已,因此最多就能达到插入在最后一行。如果要在当前位置插入,那插入的是存放在后台数据库里的,而DataGrid只是把后台数据库按你所要求的规则显示出来而已。

解决方案 »

  1.   

    除非用xml存储数据,那样就可以在任意位置插入一条记录了。
      

  2.   

    仁兄的问题是大家普遍都遇到的问题,我现在提供思路给你
    不知仁兄是一般的Windows程序,还是Web程序
    但解决问题的思路是这样的:
    DataGrid 绑定的是DataTable,所以你要在当前位置插入数据行,必须插入到DataTable中的相应位置,再绑定数据到DataGrid
    如果你是用Web ,那么根据CurrentPageIndex*PageSize和DataGrid的当前行就可以得到位置,
    在这个位置插入数据后再帮定数据,设置EditItemIndex=新行,但是记住要在Page_Load中进行才能每次都显示
    Windows程序也是类似的
    具体代码请自己编写
      

  3.   

    pengmg,我说的是windows程序,还是不行阿???你试试??
      

  4.   

    同意 Pengmg本人愚见:可以在 datagrid 的要插入的行的鼠标响应的格内,放一个 edit 控件来接收数据
              到 datatable 中,再更新 datagrid 不知识不是一个办法!
      

  5.   

    如用是 windows 程序
    可考虑用 listView 控件 vs.net 里自带的,那个里面可以随便插入
      

  6.   

    问题的原因找到了:
    在向DataTable.Rows.Add 或者 DataTable.Rows.InsertAt之后,DataTable会根据他的架构中的排序方法重新排序!所以导致了怎样都是加在最后的结果,下面的方法可以解决这个问题(即新克隆一个DataTable, 再把数据一条条加进去,同时把新建的行加入到DataGrid的当前位置)private void NewItem
    {
    DataTable tb0;
    if (this.dataGrid1.DataSource is DataSet)
    {
    DataSet ds = (DataSet)this.dataGrid1.DataSource;
    tb0 =ds.Tables[0]; 
    }
    else //if (this.dataGrid1.DataSource is DataTable)
    {
    tb0 =(DataTable)this.dataGrid1.DataSource; 
    }
    DataTable tb = tb0.Clone();

    DataRow dr = tb.NewRow();
    int idx = this.dataGrid1.CurrentCell.RowNumber;
    for (int i=0;i<idx;i++)
    {
    tb.Rows.Add(tb0.Rows[i].ItemArray);
    }

    dr[0] = (int.Parse(tb0.Rows[idx][0].ToString())+1).ToString();
    tb.Rows.Add(dr); for (int i=idx;i<tb0.Rows.Count ;i++)
    {
    tb.Rows.Add(tb0.Rows[i].ItemArray);
    }

    this.dataGrid1.DataSource = tb;
    //this.dataGrid1.SetDataBinding(ds,"DayData");
    }
      

  7.   

    非常感谢各位兄弟,特别是 Pengmg兄!!!
    真想有机会多多向你请教,请问你的qq或者msn号码?
      

  8.   

    往datatable里加
    datagrid自然也就会加一行,datagrid其实只是个显示控件,数据的控制一般都在datatable
      

  9.   

    其实问题不是出在使用什么控件上,而取决于你数据库的排序方式,如果你插入了一条记录,但是你用来排序的字段怎么能为空呢?
    如果排序的字段不为空(比如一个产品的编码等等),就不会产生你说的问题。如果一定要插入,我觉得也许LISTVIEW控件好一些
      

  10.   

    int idx = this.dataGrid1.CurrentCell.RowNumber
    DataTable dt=((DataSet)DataGrid.DataSource).Table[0];
    DataRow dr=dt.NewRow();
    dt.Rows.InsertAt(dr,idx);
      

  11.   

    如上面xiaodele小得乐的方法,定义dt是一个datatable
    可是在DataRow dr=dt.NewRow();之后dt.Rows.InsertAt(dr,idx)的话,就会
    出现“空值”的异常!!这又该如何解决阿??
      

  12.   

    还有换成独立的datatable之后更新到数据库里面就有问题了,但是用dataset11.tables["table1"]却不能把row插到指定的当前位置,看来真是没办法了!!!
    看来ado.net设计的好差阿,要不就是dataset这个东西太不好用了,datagrid也不怎么样!!!微软.net的东西也就是这个样子!!