简单的DataGrid的问题,如何在光标所在的行前面插入一个新行?如何删除光标所在的行? 如果是通过鼠标进入行的,可以通过DataGrid.HitTest方法返回HitTestInfo,通过HitTestInfo.Type属性得到当前单击的是Cell,还是其它部分,如果是Cell,可以通过HitTestInfo.Row来获得鼠标单击的行,这样就可以操作了最好放在MouseDown这个事件中,因为这个事件返回MouseEventErgs,可以访问鼠标当前的X,Y,通过这两个参数来调用HitTest方法 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 try thisDataRow row = new DataRow(); int newrowIndex= this.dataGrid1.CurrentRowIndex-1; ds.Tables[0].Rows.InsertAt(row,newrowIndex); this.dataGrid1.CurrentRowIndex= newrowIndex; 删除光标所在的行的数据,但是不要从数据库中删除,只要当我update之后才真正的删除.dataset本来就是这样的 ds.Tables[0].Rows.InsertAt(row,newrowIndex);Table[0]是什么意思呢? 你update的时候删除了Tables[0]是第一张表,也可以Tables["tablename"] DataRow row = new DataRow(); 编译不通过:Winform.cs(681): No overload for method 'DataRow' takes '0' arguments是什么意思呀? DataRow row = ds.Tables[0].NewRow() 1. ds.Tables[0].Rows.InsertAt(row,newrowIndex);执行完之后提示说某个列的数据不能为NULL,难道我非要给它填入数据吗?就不能像最后一个空行那样虽然没有数据也不出错吗?2,如果this.dataGrid1.CurrentRowIndex = 0 就是说如果光标在第一行,那么this.dataGrid1.CurrentRowIndex - 1 不就是 -1了吗?这不就出错了吗?怎么解决呀? 在指定位置插入我不会,但删除指定行我是经常做的,有两个方法,一种比较麻烦,首先通过DataGrid的CurrentCellChanged属性找到当前datagrid的行,假设为row,然后通过datagrid[row,主键所在的列].ToString()得到当前主键,在对应的DataSet中通过foreach找到dataset中该主键所在的行,删除掉就可以了,如果datagrid没有排序(通过单击列标题),则datagrid的当前行号和dataset的行是对应的,排序后,datagrid的前后顺序变了,而dataset去没有变,因此,最好通过查找来确定当前行。第二个办法,将主键绑到一个文本框或标签等控件上,根据绑定控件的TEXT属性就知道当前主键了,然后在dataset中找到该行,删除即可。 顺便说我一下,我的DataGrid总是和DataSet绑定的。 to: gatr()我是使用下面这个语句就删除了我想删除的行,我没有使用DataSet,所以没有出现我点击列头排序之后删错行的问题!. :)dataView1.Delete(dataGrid1.CurrentRowIndex); 那你就不要减1了,直接再当前行的位置插入吧,不过datagrid会自动会你排序的,看上去并不是再当前位置 to:1. ds.Tables[0].Rows.InsertAt(row,newrowIndex);执行完之后提示说某个列的数据不能为NULL,难道我非要给它填入数据吗?就不能像最后一个空行那样虽然没有数据也不出错吗?这个问题怎么办? 在Validating事件里private void dataGrid1_Validating(object sender, System.ComponentModel.CancelEventArgs e) { e.Cancel; }控制一下看行不行 用默认值 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 DataRow row = ds.Tables[0].NewRow()row["name"]="";row["id"]="";ds.Tables[0].Rows.add(row);就可以得到一个空行了。 用绑定不可以吗?将datagrid绑定到dataset中的表中,这样每次单击datagrid中的一行是就会移动到当前记录然后再执行插入、删除操作不行吗?关注 Winform 怎么实现离线数据库?(不联网,与SQL数据库断开状态下实现) 想在一个TextBlock里动态刷新时间,可是它报错,求大神指点。。 精化分析类到设计类 在datagridview上如何通过编程添加button按钮? 10分相求抽像类跟接口的区别,接口、抽像类可以包含方法的实现吗? 如何熟悉.NET Framework之中定义的上千个classes??? 求救:CodeDomSerializer的问题 新手问题 下载网页数据实时刷新 如何处理URL接收过来的值? 在C#中加cell控件的问题? 在线等待 请问怎样响应点击最小化,最大化和关闭按钮?
int newrowIndex= this.dataGrid1.CurrentRowIndex-1;
ds.Tables[0].Rows.InsertAt(row,newrowIndex);
this.dataGrid1.CurrentRowIndex= newrowIndex;
dataset本来就是这样的
Table[0]是什么意思呢?
Tables[0]是第一张表,也可以Tables["tablename"]
Winform.cs(681): No overload for method 'DataRow' takes '0' arguments是什么意思呀?
执行完之后提示说某个列的数据不能为NULL,难道我非要给它填入数据吗?就不能像最后一个空行那样虽然没有数据也不出错吗?2,如果this.dataGrid1.CurrentRowIndex = 0 就是说如果光标在第一行,那么this.dataGrid1.CurrentRowIndex - 1 不就是 -1了吗?这不就出错了吗?怎么解决呀?
第二个办法,将主键绑到一个文本框或标签等控件上,根据绑定控件的TEXT属性就知道当前主键了,然后在dataset中找到该行,删除即可。
我是使用下面这个语句就删除了我想删除的行,我没有使用DataSet,所以没有出现我点击列头排序之后删错行的问题!. :)
dataView1.Delete(dataGrid1.CurrentRowIndex);
1. ds.Tables[0].Rows.InsertAt(row,newrowIndex);
执行完之后提示说某个列的数据不能为NULL,难道我非要给它填入数据吗?就不能像最后一个空行那样虽然没有数据也不出错吗?这个问题怎么办?
在Validating事件里
private void dataGrid1_Validating(object sender, System.ComponentModel.CancelEventArgs e)
{
e.Cancel;
}
控制一下看行不行
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
row["name"]="";
row["id"]="";
ds.Tables[0].Rows.add(row);
就可以得到一个空行了。