c#难道没有这样的功能?我想在datagrid《当然位置插人》一条row怎么实现? 首先你这样的思路肯定就行不通的。你想想,DataGrid只不过是个数据绑定的控件而已,因此最多就能达到插入在最后一行。如果要在当前位置插入,那插入的是存放在后台数据库里的,而DataGrid只是把后台数据库按你所要求的规则显示出来而已。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 除非用xml存储数据,那样就可以在任意位置插入一条记录了。 仁兄的问题是大家普遍都遇到的问题,我现在提供思路给你不知仁兄是一般的Windows程序,还是Web程序但解决问题的思路是这样的:DataGrid 绑定的是DataTable,所以你要在当前位置插入数据行,必须插入到DataTable中的相应位置,再绑定数据到DataGrid如果你是用Web ,那么根据CurrentPageIndex*PageSize和DataGrid的当前行就可以得到位置,在这个位置插入数据后再帮定数据,设置EditItemIndex=新行,但是记住要在Page_Load中进行才能每次都显示Windows程序也是类似的具体代码请自己编写 pengmg,我说的是windows程序,还是不行阿???你试试?? 同意 Pengmg本人愚见:可以在 datagrid 的要插入的行的鼠标响应的格内,放一个 edit 控件来接收数据 到 datatable 中,再更新 datagrid 不知识不是一个办法! 如用是 windows 程序可考虑用 listView 控件 vs.net 里自带的,那个里面可以随便插入 问题的原因找到了:在向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");} 非常感谢各位兄弟,特别是 Pengmg兄!!!真想有机会多多向你请教,请问你的qq或者msn号码? 往datatable里加datagrid自然也就会加一行,datagrid其实只是个显示控件,数据的控制一般都在datatable 其实问题不是出在使用什么控件上,而取决于你数据库的排序方式,如果你插入了一条记录,但是你用来排序的字段怎么能为空呢?如果排序的字段不为空(比如一个产品的编码等等),就不会产生你说的问题。如果一定要插入,我觉得也许LISTVIEW控件好一些 int idx = this.dataGrid1.CurrentCell.RowNumberDataTable dt=((DataSet)DataGrid.DataSource).Table[0];DataRow dr=dt.NewRow();dt.Rows.InsertAt(dr,idx); 如上面xiaodele小得乐的方法,定义dt是一个datatable可是在DataRow dr=dt.NewRow();之后dt.Rows.InsertAt(dr,idx)的话,就会出现“空值”的异常!!这又该如何解决阿?? 还有换成独立的datatable之后更新到数据库里面就有问题了,但是用dataset11.tables["table1"]却不能把row插到指定的当前位置,看来真是没办法了!!!看来ado.net设计的好差阿,要不就是dataset这个东西太不好用了,datagrid也不怎么样!!!微软.net的东西也就是这个样子!! c# 获取回车后光标所在位置的控件名称或者tabindex comboBox查询问题 ShowDialog问题(50分)不够可以加分(急) StreamWrite是不是只能对 文本文件进行写操作?? C#程序设计都该学什么?! 新手求助 .Net Framework中的这样的显式接口继承有什么意义? 文个简单的继承问题? socket问题3 初学者的C#简单问题 水晶报表那儿下载 求水晶报表9.2版的中文版帮助?
不知仁兄是一般的Windows程序,还是Web程序
但解决问题的思路是这样的:
DataGrid 绑定的是DataTable,所以你要在当前位置插入数据行,必须插入到DataTable中的相应位置,再绑定数据到DataGrid
如果你是用Web ,那么根据CurrentPageIndex*PageSize和DataGrid的当前行就可以得到位置,
在这个位置插入数据后再帮定数据,设置EditItemIndex=新行,但是记住要在Page_Load中进行才能每次都显示
Windows程序也是类似的
具体代码请自己编写
到 datatable 中,再更新 datagrid 不知识不是一个办法!
可考虑用 listView 控件 vs.net 里自带的,那个里面可以随便插入
在向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");
}
真想有机会多多向你请教,请问你的qq或者msn号码?
datagrid自然也就会加一行,datagrid其实只是个显示控件,数据的控制一般都在datatable
如果排序的字段不为空(比如一个产品的编码等等),就不会产生你说的问题。如果一定要插入,我觉得也许LISTVIEW控件好一些
DataTable dt=((DataSet)DataGrid.DataSource).Table[0];
DataRow dr=dt.NewRow();
dt.Rows.InsertAt(dr,idx);
可是在DataRow dr=dt.NewRow();之后dt.Rows.InsertAt(dr,idx)的话,就会
出现“空值”的异常!!这又该如何解决阿??
看来ado.net设计的好差阿,要不就是dataset这个东西太不好用了,datagrid也不怎么样!!!微软.net的东西也就是这个样子!!