我是用Columns的OnUpdateData事件响应用户的选择。ADOQuery,sql2000,DBGridEh。但调试时发现,在OnUpdateData事件响应的过程里,使用DBGridEh1.SelectedField.AsString获得的总是前次数据库里的值?因为这时还没有更新数据库? 请问用什么值可以返回用户选择的哪个值呢?不知道我说明白我的意思没?好象ComBox有一个OnUpdateData事件响应Text存放当前值,还有个SelText存放用户选择的值?在picklist里如何获得呢?谢谢了。

解决方案 »

  1.   

    我晕,高高手,能说的具体点吗?这个东东和picklist怎么结合的用?是DBGridEh的属性吗?
      

  2.   

    for i:=0 to DBGrid1.ComponentCount-1 do
         if DBGrid1.Components[i] is TInplaceEdit then
           Edit1.Text := TEdit(DBGrid1.Components[i]).Text;edit1.text的值就是你当前编辑单元格的值,而不是你前次数据库里的值
      

  3.   

    崩溃边缘!不懂。它和picklist能连用吗?就是我picklist的那个格其实也是TInplaceEdit的?!!这段代码应该放到哪里呢?Columns.OnUpdateData事件里吗?刚我在DBGridEh里找到个DBGridEh.InplaceEditor.edittext,能用吗?
      

  4.   

    非常感谢,我刚试了试,的确把当前的编辑值取出来了。谢谢高手了。现在取出的是当前编辑单元格的值,然后再post一下就可以写到库里了吗?写库时是不是也用Components[i]呢?还是改Field[i].value?怎么经常出现ADOQuery的dataset not edit or insert 错误?
      

  5.   

    如果你用的是DBgrid的话,post就行了。不要管其他了。
    ADOQuery的dataset not edit or insert 错误 post前加adoquery.edit就可以了。
      

  6.   

    我也知道要edit,但总是出错?
    是不是ADOQuery.first,moveby,next等也要edit?我的完全代码如下,要求根据picklist下拉框的不同选择,改变不同数据格里的值,注意不是只改当前纪录行,是任意行的记录。中间涉及到当前记录行的切换。麻烦您了,帮我看看,眼看就要完成了,55555,急啊我调试是发现语句执行到post后,都没错,而且sql里看数据库表里的值也都存了!但在DBGridEh里的UpdateValues出错!!肯定不是控件的错,但不知道错哪里了。帮帮忙!!
    procedure TForm_Bijiao.DBGridEh_BijiaoColumnsUpdateData(Sender: TObject;
      var Text: String; var Value: Variant; var UseText, Handled: Boolean);
    var
      s:String;
      m,n,i:integer;
    begin
      if DBGridEh_Bijiao.SelectedIndex > 0 then
      begin  for i:=0 to DBGridEh_Bijiao.ComponentCount-1 do
         if DBGridEh_Bijiao.Components[i] is TInplaceEdit then
           s:= TEdit(DBGridEh_Bijiao.Components[i]).Text;  m:=DBGridEh_Bijiao.Row-1;
      n:=DBGridEh_Bijiao.Col-1;
      n:=(n-1) DIV 2;  if s='极其重要' then
      begin    DBGridEh_Bijiao.SelectedField.Value:=s;   //将当前编辑格的值写进库    if n=0 then
          ADOQuery_Bijiao.First
        else   ADOQuery_Bijiao.MoveBy(n-m);     //移动当前记录到指定行
    ADOQuery_Bijiao.Fields[2*m+1].Value:='极其次要';    //写指定格的值    if not (ADOQuery_Bijiao.State in [dsEdit, dsInsert]) then ADOQuery_Bijiao.Edit;
        ADOQuery_Bijiao.Post;  end;  end; {if DBGridEh_Bijiao.SelectedIndex > 0}
    end;{procedure}