C#Form编程,Datatable增加1行,Datagridview增加2行,不知道为什么 datagridview的屬性欄中的AllowUserToAddRows默認為true時,datagridview面板在你添加的行數下面都會默認多1行,如果你不希望看到它,那麼就把AllowUserToAddRows設置為False,LZ不妨試試看 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 DataTable mydt = (DataTable)dataGridView1.DataSource;mydt.Rows.Add(mydt.NewRow());楼主代码是在事件中吧,会不会是在添加新行过程中触发了事件,结果又添加了,而这种情况,不只两行了,会无穷多楼主可以在试试这样DataTable mydt=new DataTable();mydt=…… DataTable mydt = (DataTable)dataGridView1.DataSource; mydt.Rows.Add();累赘 我是设置的AllowUserToAddRows,末尾自动加一行但是,刚开始的时候,也是这么设置的,执行代码后,只增加一行,最末的那行自动往下移动。可现在执行代码第一次,增加两行,算上最末那行,三行了,三行都是空数据。假设datagridview里有1行数据,1行new(AllowUserToAddRows),调试过程,看到。代码执行第一次的时候datatable里有2行,按道理datagridview里算上最末那行,应该是3行,可是datagridview里有了4行,最末行标记isNewRow为true然后,再执行一次,datatable里程了3行,datagridview里程了5行,也就是正确执行了,始终跟datatable同步,每执行一次,加一行,问题就出在第一次执行上面。我把所有的代码都屏蔽了,就剩这个,还是这个问题,百思不得其解啊。刚开始的时候是好的,不知道后来哪里变了下,导致这样的 DataTable mydt = (DataTable)dataGridView1.DataSource;//获取dataGridView1数据源mydt.Rows.Add(mydt.NewRow());//已经New了一行了,然后又加了一行,是不是两行? 不是这个问题,mydt.Rows.Add(mydt.NewRow());---------拆成2行代码是这样---------DataRow row = mydt.NewRow();mydt.Rows.Add(row); 问题再补充下,不知道哪里的问题经我测试,我不点击选择datagridview,则只增加1行如果我点击了datagridview,选中了其中一行则第一次增加2行,第二次以后就开始正常增加1行了 应该是 AllowUserToAddRows = true; 的原因。 我也纳闷啊,不知道啥原因重新做个form试验,没有问题我做的是个自定义控件,里面的代码控件做完的时候好好的,后来不知道加了什么功能,就变成这样了可恨的,现在全部代码都注释了,还找不到原因。更可恨的,调试也看不出问题,调试直接看到datatable就2行,而datagridview的rows.count已经变成了4,应该是3才对的唯一寄希望,谁遇到过这种情况了 感谢CCTV,感谢大家的热情参与,在我无敌不懈的努力下,终于找到答案了,以后有人搜索到,希望对您能有所帮助。在我超级调试的情况下,抽丝剥茧,发现问题出在这里:----------------------解决办法---------------------------------我的datagridview是在自定义控件里,在在定义控件(类似Form,就是背景的那个)的属性里有个 行为--AutoValidate,里面有四个选项,我不知道什么时候改成了Disable,就导致了上面的原因,改回默认:EnablePreventFocusChange,里面的datagridview就正常了。这个属性的中文解释为:指示焦点更改时是否自动验证容器中的控件。------------------------原因分析----------------------------------原因分析下:我的情况出在,我单击选择datagridview中的新行,然后点击按钮执行代码后,就增加两行。不点击datagridview,直接执行代码,就不会增加两行,只会增加一行。估计的意识是:我一点击datagridview的那个最末尾 新行(row.isNewRow),这个新行其实就已经不是newrow了。相当于已经为datagridview加了一行,我再操作datasource中的datatable加一行新行,等datasource变化,datagridview也跟着变化,它会把刚才的行,加上新加上的行,一起变化显示出来。---------------------结束语-----------------------------说了这么多,估计大家也是一头雾水,总之,这帖子以后对某个迷茫中的人指点迷津,就是我最大的荣幸了,这个东西今天烦了我一天 哥们,这种类似的情况我碰到两次,一次解决了,一次还没有解决。一种情况为,在一个普通的按钮事件里面DataRow dr = dt.NewRow();dr["EmpId"] = frmSelectCate.drReturn["ID"];dr["JoinMember"] = frmSelectCate.drReturn["EmpName"];dt.Rows.Add(dr);dt.AcceptChanges();这样做就会出现新增两行的情况,一行有数据,一行为空白行。另一种情况是在datagridview的双击事件里面 DataRow dr = dt.NewRow();dr["EmpId"] = frmSelectCate.drReturn["ID"];dr["JoinMember"] = frmSelectCate.drReturn["EmpName"];dt.Rows.Add(dr);dt.AcceptChanges();当然此时也会出现上述状况。正对第一个在按钮事件进行新增行的情况,只需要在前面加上这句话,#region 这句话this.dataGridView.CancelEdit();#endregion就可以解决新增空白行的问题。但针对第二种情况,无论是按照楼主的方法,还是按照我的那个方法,都不能解决。 今天我也遇着这问题了,之前遇着但可能很快搞定了所以没记录。刚又折腾了近一个小时才搞定,中途试过你的方法,不管用。然后我就代码: DataTable dt = dgv.DataSource as DataTable; dt.AcceptChanges(); DataRow dr=dt.NewRow(); dr[""]=..; dt.Rows.Add(dr);问题解决。 关于c#中颜色的转换问题 全局程序集缓存(GAC) [请教]程序集的概念辨析 求教QQ校友农场新手任务小程序(可付100元) 问一特基础的问题,我实在看不懂了 如何访问Web数据库? 哪个有Win32 API大全下载 请教:如何提高程序启动的速度? .Net拖动布局并保存当前状态到xml文件里 关闭句柄窗口 什么样的数据结构可以做泛型对象的容器? SilverLight 中关于 ASCII码转换问题
mydt.Rows.Add(mydt.NewRow());
楼主代码是在事件中吧,会不会是在添加新行过程中触发了事件,结果又添加了,而这种情况,不只两行了,会无穷多
楼主可以在试试这样
DataTable mydt=new DataTable();
mydt=……
mydt.Rows.Add();累赘
但是,刚开始的时候,也是这么设置的,执行代码后,只增加一行,最末的那行自动往下移动。可现在执行代码第一次,增加两行,算上最末那行,三行了,三行都是空数据。假设datagridview里有1行数据,1行new(AllowUserToAddRows),调试过程,看到。代码执行第一次的时候datatable里有2行,按道理datagridview里算上最末那行,应该是3行,可是datagridview里有了4行,最末行标记isNewRow为true然后,再执行一次,datatable里程了3行,datagridview里程了5行,也就是正确执行了,始终跟datatable同步,每执行一次,加一行,问题就出在第一次执行上面。我把所有的代码都屏蔽了,就剩这个,还是这个问题,百思不得其解啊。刚开始的时候是好的,不知道后来哪里变了下,导致这样的
mydt.Rows.Add(mydt.NewRow());//已经New了一行了,然后又加了一行,是不是两行?
不是这个问题,
mydt.Rows.Add(mydt.NewRow());
---------拆成2行代码是这样---------
DataRow row = mydt.NewRow();
mydt.Rows.Add(row);
如果我点击了datagridview,选中了其中一行则第一次增加2行,第二次以后就开始正常增加1行了
重新做个form试验,没有问题我做的是个自定义控件,里面的代码控件做完的时候好好的,后来不知道加了什么功能,就变成这样了可恨的,现在全部代码都注释了,还找不到原因。更可恨的,调试也看不出问题,调试直接看到datatable就2行,而datagridview的rows.count已经变成了4,应该是3才对的唯一寄希望,谁遇到过这种情况了
---------------------结束语-----------------------------说了这么多,估计大家也是一头雾水,总之,这帖子以后对某个迷茫中的人指点迷津,就是我最大的荣幸了,这个东西今天烦了我一天
一种情况为,在一个普通的按钮事件里面
DataRow dr = dt.NewRow();
dr["EmpId"] = frmSelectCate.drReturn["ID"];
dr["JoinMember"] = frmSelectCate.drReturn["EmpName"];
dt.Rows.Add(dr);
dt.AcceptChanges();
这样做就会出现新增两行的情况,一行有数据,一行为空白行。
另一种情况是在datagridview的双击事件里面
DataRow dr = dt.NewRow();
dr["EmpId"] = frmSelectCate.drReturn["ID"];
dr["JoinMember"] = frmSelectCate.drReturn["EmpName"];
dt.Rows.Add(dr);
dt.AcceptChanges();
当然此时也会出现上述状况。
正对第一个在按钮事件进行新增行的情况,
只需要在前面加上这句话,
#region 这句话
this.dataGridView.CancelEdit();
#endregion
就可以解决新增空白行的问题。
但针对第二种情况,无论是按照楼主的方法,还是按照我的那个方法,都不能解决。
刚又折腾了近一个小时才搞定,中途试过你的方法,不管用。
然后我就代码:
DataTable dt = dgv.DataSource as DataTable;
dt.AcceptChanges();
DataRow dr=dt.NewRow();
dr[""]=..;
dt.Rows.Add(dr);
问题解决。