给一个外部TDGGrid添加一行记录后,怎么结束"插入"状态

给一个外部TDGGrid添加一行记录后,如何结束"插入"状态?
对一个外部程序的dbgrid取得控件后
Delphi(Pascal) code

DataSet := TDBGrid(vWinControl.Components[I]).DataSource.DataSet;

 
用了以下的句子,并给表单填上了一行值, 完成后,不管是用post, 还是把指针next或者last,,, 表单都一直处在 "插入" 状态, 请问如何结束这个插入状态, 以便再添加一行新的?
想过用DBNaVigator组建里的按键来控制, 但如果不需要用到时最好的了,因为有时候要插入的记录很多, 那是不是会导致控制键一闪一闪的....
新手,搜了很久不得要领,万望前辈指导. 谢谢!
Delphi(Pascal) code

DataSet.Active:=True;
DataSet.DisableControls;
DataSet.Append;
DataSet.Fields[0].AsString := '测试1';
DataSet.Fields[1].AsString := '测试2';
DataSet.Fields[2].AsString := '测试3';
DataSet.Fields[3].AsString := '测试4';

DataSet.Post;
DataSet.Next;



------解决方案--------------------
DataSet.Active:=True;
DataSet.DisableControls;//这句在这里没有意义,删除即可是这个导致的
DataSet.Append;
DataSet.Fields[0].AsString := '测试1';
DataSet.Fields[1].AsString := '测试2';
DataSet.Fields[2].AsString := '测试3';
DataSet.Fields[3].AsString := '测试4';

DataSet.Post;
DataSet.Next;

------解决方案--------------------
DataSet.DisableControls;//使DBGRID失去对DataSet改变的响应,所以你在DataSet做的更改并没在DBGRID中显示出来
------解决方案--------------------
1、去掉DataSet.DisableControls
2、Next,如果不是循环,这里不用。循环的话把Active放在外面
3、如果用DataSet.DisableControls,记得要DataSet.EnableControls,同时用try finally包起来,确定能够EnableControls
------解决方案--------------------
1、你用append两次,当然会保存两条记录,而且数据库中显示的也是正确的,第一条在下面,后面新增的在上面,指针指向当前新增的记录。新增的话,指针新增指向新增的记录。这里不用next或last。next是循环时用,于指向下一条记录,last是指向数据集的最后一条记录。
2、TMyNavgator只是一个工具,你完全可以自己在代码写
比如:
点击新增按钮:
dataSet.append;
dataSet.Fields[0].astring := 'value1';
dataSet.Fields[1].astring := 'value2';
dataSet.Post;
删除:
dataSet.Delete;
下一条: 
dataSet.next; //可以判断下,是否为eof和bof
上一条:
dataSet.prior;等等
  
post后数据集的状态为browser,你自己可以跟踪一下,post后,哪里吧状态修改成“Insert”状态?

------解决方案--------------------
你自己设下断点,输出dataSet.State,插入状态是不需要状态的切换,grid会自己完成。你看下grid的afterscoll、beforePost等事件是不是写了什么,有按条件执行cancal或其他的操作,自己单步测试一下吧,这个问题不复杂的
------解决方案--------------------
有主键的情况下,append或insert多条记录之后没有requery刷新记录时,如果有多条相同的记录,再修改就会产生各种各样的错误。我一般都采用代码添加,添加后刷新,再设置当前记录为编辑状态。