请问一个delphi 中dbgrid 控件的问题……………我的一个用dbgrid 的数据输入画面 .其中新增﹐修改﹐删除数据是用button按钮控件﹐只用dbnavigator 控件的四个记录移动控件 ﹐但现在有一个问题﹐就是
Dbgrid ﹐对于上下移动光标键﹐能隐含的调用post , 这就不受我的存储按钮控制了 ﹐很是麻烦﹐不知如何解决 ﹐即 当我按下新增或修改按钮时 ﹐adotable.insert , 如何控件dbgrid 的当前行不移动 .又且当我按<存储>存盘后 ﹐移动上下行﹐不自动新增新增﹐总知一句话﹐
Dbgrid 上的数据变更全由 我本身的几个按钮来按制 ﹐不需要dbgrid 隐式的调用.. 应如何做呢 ?急请高手解决……………..
Dbgrid ﹐对于上下移动光标键﹐能隐含的调用post , 这就不受我的存储按钮控制了 ﹐很是麻烦﹐不知如何解决 ﹐即 当我按下新增或修改按钮时 ﹐adotable.insert , 如何控件dbgrid 的当前行不移动 .又且当我按<存储>存盘后 ﹐移动上下行﹐不自动新增新增﹐总知一句话﹐
Dbgrid 上的数据变更全由 我本身的几个按钮来按制 ﹐不需要dbgrid 隐式的调用.. 应如何做呢 ?急请高手解决……………..
现在应确定的是﹐当改变dbgrid的当前行时﹐该控件是在哪个事件中引发的 ﹐如果发现行到了dbgrid的尾部﹐就自动post ﹐然后insert 一笔。如果知道了dbgrid 控件这个事件﹐就像如何来防止该事件发生﹐或在引发该事件前﹐先判断该用户是否有新增的权限﹐
procedure TForm1.Button1Click(Sender: TObject);
Var //book:Tbook;
Query:tADOQuery;
code:String;
begin
Query:=TADOQuery.Create(self);
Query.Connection:=ADOConnection1;
ADOQuery1.Last; with Query do
begin
Close;
Sql.Clear;
Sql.Add('select max(fvcode)+1 as maxcode from basicdata_dept where fiparentID='+IntToStr(1));
Open;
code:=fieldbyname('maxcode').AsString;
end;
ADOQuery1.Append;
ADOQuery1.FieldByName('fvcode').AsString:=Code;
DBGridEH1.SetFocus;
tDrawGrid(DBGridEH1).Col:=2;end;procedure TForm1.Button2Click(Sender: TObject);
begin
buttsave;
end;procedure TForm1.ButtSave;
Var book:Tbook;
begin
ADOQuery1.Last;
book:=ADOQuery1.GetBook;
if ADOQuery1.FieldByName('fvname').IsNull then
begin
showmessage('不能为空');
abort;
exit;
end;
if adoquery1.BookValid(book) then
adoquery1.GotoBook(book);
try
// if (ADOQuery1.State=dsEdit) or (ADOQuery1.State=dsInsert) then
adoquery1.UpdateBatch();
except
adoquery1.Cancel;
end;
end;procedure TForm1.ADOQuery1AfterPost(DataSet: TDataSet);
begin
buttsave;
end;procedure TForm1.DBGridEh1ColExit(Sender: TObject);
begin
if adoquery1.FieldByName('fvname').IsNull then
begin
showmessage('11111111不能为空');
abort;
exit;
end;
end;procedure TForm1.DBGridEh1Columns2UpdateData(Sender: TObject;
var Text: String; var Value: Variant; var UseText, Handled: Boolean);
begin
if text='' then
begin
showmessage('2222222不能为空');
abort;
exit;
end;
end;procedure TForm1.Button3Click(Sender: TObject);
var //book:tbook;
// sid:Integer;
adoquery:tadoquery;
begin
adoquery:=tadoquery.Create(self);
adoquery.Connection:=adoconnection1;
//sid:=;
if adoquery1.FieldByName('id').AsString='' then
adoquery1.Delete
else
begin
if Application.MessageBox('删除后不能恢复,是否确定删除?','提示',MB_OkCancel+MB_ICONINFORMATION)=IDOK then
begin
adoquery1.Delete;
{ with adoquery do
begin
close;
sql.Clear;
sql.Add('delete from basicdata_dept where id='+IntToStr(adoquery1.FieldValues['id']));
execsql;
end;}
end;
adoquery1.Prior;
adoquery1.Close;
adoquery1.Open;
end;end;