我开始的时候先写了一个测试程序,有一个DATAGRID和一个BUTTEN按钮,当我执行程序后,先修改DATAGRID中的第1个选中单元格的数据后,马上点BUTTEN按钮去查看DATASET中HasChanges()是否有变化,系统提示数据已经修改。
然后我在正式程序中使用的是DATAGRID和toolbar_butten按钮,问题就出现了,当我将第1个选中单元格的数据后马上查看DATASET中HasChanges()系统提示数据没有改变!并且我还发现如果我不将鼠标选中别的行数据,不管在第1选中行中修改哪个列的数据系统都会提示数据没有改变。除此以外我还发现,如果我在检查数据更新以前先执行 ds.AcceptChanges()在断点跟踪时发现DATASET中的数据已经改变,但是使用HasChanges()去检查系统还是给我返回数据未更改
救命啊这里是出了什么问题啊!!!
代码如下:
if(!this.ds.HasChanges())
{
MessageBox.Show ("您还没有修改数据?", "信息提示",MessageBoxButtons.OK, MessageBoxIcon.Question);
}
然后我在正式程序中使用的是DATAGRID和toolbar_butten按钮,问题就出现了,当我将第1个选中单元格的数据后马上查看DATASET中HasChanges()系统提示数据没有改变!并且我还发现如果我不将鼠标选中别的行数据,不管在第1选中行中修改哪个列的数据系统都会提示数据没有改变。除此以外我还发现,如果我在检查数据更新以前先执行 ds.AcceptChanges()在断点跟踪时发现DATASET中的数据已经改变,但是使用HasChanges()去检查系统还是给我返回数据未更改
救命啊这里是出了什么问题啊!!!
代码如下:
if(!this.ds.HasChanges())
{
MessageBox.Show ("您还没有修改数据?", "信息提示",MessageBoxButtons.OK, MessageBoxIcon.Question);
}
解决方案 »
- 问题:C#不允许引发Object类型的一个异常?求解释
- C#中通过GetElementByTagName无法遍历所有的元素?
- datatable导出excel cell内容包含中英文时,出错。
- Datetime?类型转换的问题
- 知道了字体、字号、文字,C#有没有可能精确知道这串字符的高度和宽度?
- c#中添加连接时,数据源里面没有可选的!!!!
- 两个DataSet问题?解决立马给分
- 大家介绍一下有关C#和Access相连接的书啊
- 请教关于SQL Server的image类型和Access的OLE对象类型的问题
- 得到"点对点传输文件"的源代码,大家看看!
- datagrid中的数据更新问题.请看下面的button3_Click应该怎么写??(此程序运行没问题.就是更新有问题)请大家帮忙啊...
- 如何触发listview滚动条滚动事件!!!
dataGrid.Enabled = true;
if(!this.ds.HasChanges())
{
MessageBox.Show ("您还没有修改数据?", "信息提示",MessageBoxButtons.OK, MessageBoxIcon.Question);
}
//UpdateDB....
上边的兄台还有什么别的办法吗?
dataGrid.Enabled = true;
if(!this.ds.HasChanges())
{
MessageBox.Show ("您还没有修改数据?", "信息提示",MessageBoxButtons.OK, MessageBoxIcon.Question);
}试过了没有????可以的。
你说的
dataGrid.Enabled = false;
dataGrid.Enabled = true;
办法也好象不可以!我断点看见数据都还没改变还是原来的。。
和刚才说的一样我断点看见数据都还没改变还是原来的。
数据还是没有改变啊!!
我在处理的时候先执行DS.AcceptChanges()还能将值改变了,但是这里值都没有变化啊!!是不是我DATAGRID的设置或者别的什么问题错了??
所以在判斷HasChanges()前﹐必須結束DataGrid的編輯同時DataView的當前綁定行要EndEdit().
你的問題主要是DataGrid沒有結束編輯狀態。Button可以接受Focuse,所以點擊Button后DataGrid可以結束編輯狀態,但是toolbar_butten不能接受Focuse,所以DataGrid并沒有結束編輯狀態.
解決方法是:在點擊toolbar_butten之前,先讓DataGrid失去焦點﹐再執行
this.BindingContext(ds,"tablename").EndCurrentEdit()
看看是不是變了!
SendKeys.Send("{Right}");
能写具体点吗??
最好用一個DataTable來查看.將DataGrid綁定到DataTable上后,更改DataGrid﹐然后查看Table的DataView(一定要是DataView﹐因為DataTble此時還未更改)
另外你可以用DataTable.Select查看System.Data.DataViewRowState.ModifiedCurrent的資料行﹐看看是否有更改的,或 System.Data.DataViewRowState.Added查看添加的行
为了达到更新的目的,就模拟DataGrid换一下行就行了。
下面的dg是一个DataGrid变量,为了代码重用,你可以把下面的方法写在DataGrid的继承类里.
public void AcceptChange()
{
if(dg.DataSource == null) return;
BindingManagerBase bm=dg.BindingContext[dg.DataSource,dg.DataMember];
if(bm.Position==-1)return;
try
{
int row = dg.CurrentCell.RowNumber;
dg.CurrentCell = new DataGridCell(row + 1,dg.CurrentCell.ColumnNumber);
dg.CurrentCell = new DataGridCell(row,dg.CurrentCell.ColumnNumber);
}
catch(Exception ex)
{
//
}
}
如果用户查到的数据只有一条不是要出问题?
this.BindingContext(ds,"tablename").EndCurrentEdit();//先结束当前行编辑
//UpdateDB....
你如果是在工具条按钮事件里调用该方法,数据的变动会更新到DataSet中的。除非除非DataGrid和ds没有绑定上。
this.ds=conn.get_dataset(comm);
this.dataGrid1.DataSource=ds.Tables[0];
不过我这里确实有个地方操作和别的不一样,我由于要控制列的颜色,所以定义了DATAGRID中的格,才去绑定的数据。不知道这个会不会有影响
this.ds.Tables[0].Rows.Add(ds.Tables[0].NewRow());
this.next_nell();//模拟鼠标移动
this.ds.Tables[0].Rows.RemoveAt(ds.Tables[0].Rows.Count-1);
这样数据就改变了,谢谢大家的帮忙,这里我也不再纠缠了,给大家发分!!!感谢大家,如果还有什么好的提议我们做为技术讨论