保存和删除记录之后窗口的listview显示的数据没有自动更新
listview和删除按纽是在form1  ,保存按纽是在form2,用vpq_query查询的
如何让它自动更新数据呢,谢谢!procedure Tfrm_leaderlist.cmd_delClick(Sender: TObject);
var
  namestr,pidstr : string;
  ListItem : TListItem;
  Query : TADOQuery;
begin
  ListItem := ListView1.Selected;
  if ListItem = nil then
   Exit;
  pidstr := trim(ListView1.Selected.Caption);
  namestr := trim(Listview1.Selected.SubItems[0]);
  if pidstr = '' then exit;
  if MessageBox(handle,pchar('&Auml;&atilde;&Otilde;&aelig;&micro;&Auml;&Ograve;&ordf;&Eacute;&frac34;&sup3;&yacute;"'+namestr+'"&pound;&iquest;'),'&Eacute;&frac34;&sup3;&yacute;',MB_YESNO+MB_ICONQUESTION)<>IDYES then
    exit;  Query := TADOQuery.Create(Self);
  try
    Query.ConnectionString :=vgs_ConnStr;
    with query do
    begin
      close;
      sql.Clear;
      sql.Add('delete t_leader where leader_id=:leader_id');
      parameters.ParamByName('leader_id').Value:=strtoint(pidstr);
      try
        execsql;
      except
        showmessage('&Ecirc;&yacute;&frac34;&Yacute;&Eacute;&frac34;&sup3;&yacute;&sup2;&raquo;&sup3;&Eacute;&sup1;&brvbar;!');
        exit;
      end;
    end;  finally
    Query.Close;
    Query.Free;
  end;
end;procedure Tfrm_leaderlist.FormShow(Sender: TObject);
var
  listitem:Tlistitem;
begin
    vpq_query:=Tadoquery.Create(nil);
  vpq_query.ConnectionString:=vgs_connstr;
  with vpq_query do
  begin
    close;
    sql.Clear;
    sql.Add('select * from t_leader order by leader_id');
    try
      open;
    except
      execsql;;
    end;
  end;
  while not vpq_query.Eof do
  begin
    listitem:=listview1.Items.Add;
    listitem.Caption:=vpq_query.fieldbyname('leader_id').AsString;
    listitem.SubItems.Add(trim(vpq_query.fieldbyname('leader_name').asstring));
    listitem.SubItems.Add(trim(vpq_query.fieldbyname('re').asstring));
    vpq_query.Next;
  end;
end;procedure Tfrm_operate.saveClick(Sender: TObject);
begin
   saveinfo;
  if not chkAddContinous.Checked then
      Close
  else
  begin
    txt_kind.text:=f_autoaddid('leader_id','t_leader',2);   
  end;
end;procedure Tfrm_operate.saveinfo;
var
  SqlStr : String;
  query : Tadoquery;
  opeid : string;
begin
    query := Tadoquery.Create(self);
  try
    query.ConnectionString :=vgs_ConnStr;
    if chkAddContinous.Visible then
    begin //&Ocirc;&ouml;&frac14;&Oacute;
      query.Close;
      query.SQL.Clear;
      query.SQL.Add('insert into t_leader(leader_id,leader_name,re) values (:leader_id,:leader_name,:re)');
      query.Parameters.ParamByName('leader_id').Value:=strtoint(txt_kind.Text);
      query.Parameters.ParamByName('leader_name').Value:=trim(txt_name.Text);      
    try
      query.ExecSQL;
    except
      showmessage('&Ecirc;&yacute;&frac34;&Yacute;&Ocirc;&ouml;&frac14;&Oacute;&sup3;&ouml;&acute;í&pound;&not;&Ccedil;&euml;&Oacute;&euml;&Iuml;&micro;&Iacute;&sup3;&sup1;&Uuml;&Agrave;í&Egrave;&Euml;&Ocirc;±&Aacute;&ordf;&Iuml;&micro;&pound;&iexcl;');
      exit;
    end;
  end
  else
  begin     //±à&frac14;&shy;
    query.Close;
    query.SQL.Clear;
    query.SQL.Add('update t_leader set leader_name=:leader_name,re=:re,');
    query.SQL.Add('content=:content,leader_name=:leader_name,re=:re ');
    query.sql.add('where leader_id=:leader_id');
    query.Parameters.ParamByName('leader_id').Value:=strtoint(txt_kind.Text);
    query.Parameters.ParamByName('leader_name').Value:=trim(txt_name.text);
    query.Parameters.ParamByName('re').Value:=trim(txt_re.Text);
   try
     query.ExecSQL;
   except
     showmessage('&Ecirc;&yacute;&frac34;&Yacute;&ETH;&THORN;&cedil;&Auml;&sup3;&ouml;&acute;í&pound;&not;&Ccedil;&euml;&Oacute;&euml;&Iuml;&micro;&Iacute;&sup3;&sup1;&Uuml;&Agrave;í&Egrave;&Euml;&Ocirc;±&Aacute;&ordf;&Iuml;&micro;&pound;&iexcl;');
     exit;
   end;
  end;
  finally
    query.close;
    query.Free;
  end;
 end;
end;

解决方案 »

  1.   

    笨的方法
    当保存时 ListView重新读取一下数据
      

  2.   

    你显示的时候应该是用查询后一条条写到listview中的吧。
    把这个写成一个过程,然后,当删除后,再调一次这个过程就行了。
      

  3.   

    procedure Tfrm_leaderlist.FormShow(Sender: TObject);
    var
      listitem:Tlistitem;
    begin
        vpq_query:=Tadoquery.Create(nil);
      vpq_query.ConnectionString:=vgs_connstr;
      with vpq_query do
      begin
        close;
        sql.Clear;
        sql.Add('select * from t_leader order by leader_id');
        try
          open;
        except
          execsql;;
        end;
      end;
      while not vpq_query.Eof do
      begin
        listitem:=listview1.Items.Add;
        listitem.Caption:=vpq_query.fieldbyname('leader_id').AsString;
        listitem.SubItems.Add(trim(vpq_query.fieldbyname('leader_name').asstring));
        listitem.SubItems.Add(trim(vpq_query.fieldbyname('re').asstring));
        vpq_query.Next;
      end;
    end;把这个写成一个过程,别在show里面直接写。
    供其它的地方能调用它