我通过formcreate将数据库相应字段的数据添加到了combobox中,现在发现一个问题是如果我把其中一组数据给删除,combobox中仍然显示着那串数据,一定要把程序关闭再重新打开才会更新里面的数据。我也知道formcreate是一次性的东西,那现在有没有甚么办法比如添加一个刷新按钮来更新combobox中新的数据(或是更好的办法...)关闭程序重新打开巨麻烦啊~~~

解决方案 »

  1.   

    你可以在删除数据库表中的数据后去删除对应ComboBox中项,代码可以写在数据集的OnAfterDelete事件中。
      

  2.   

    如果增加/删除/修改时同时增加/删除/修改combobox中对应的数据,会麻烦点,要处理很多相关的事件
    不如重新加载数据来的方便{声明方法setcomb}
    private
     procedure setcomb;{添加combobox数据,数据来源自己决定从那里取}
    procedure TForm1.setcomb;
    begin
      with combobox.items do
      begin
       clear;
       add('A');
       add('B');
      end;
    end;{打开窗口时调用}
    procedure TForm1.FormCreate(Sender: TObject);
    begin
    setcomb;
    end;{刷新按扭调用,或者其它想刷新的地方就加上setcomb;就行了}
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    setcomb;
    end;
      

  3.   

    感谢LS的指点~问题大致是解决了~但发现这刷新貌似只能点一次~点第二次就报内存错误了,麻烦帮我看下是不是我获取数据库时的方式不对~
    procedure TCRSH.setcomb;
    begin
      with adoqueryDW do
        begin
          sql.Clear;
          sql.Add('select 单位名称 from 单位类别表');
          open;
          combobox1.Items.Clear;
          while not eof do
            begin
              combobox1.Items.Add(FieldByName('单位名称').asstring);
                next;
            end;
            close;
            free;
            combobox1.ItemIndex:=0;
        end;
    end;
      

  4.   

    combobox在formcreate事件中添加的内容,那么只会在窗口创建时执行一次,这个数据与数据库在其它时间并不关联,所以数据库删除了数据后combobox的内容是不会变化的,你应该选择合适的时间来重置combobox的内容
      

  5.   


    代码里的free;语句是错误的,在这里的意思是Free掉adoqueryDW,所以第二次执行时就错误了
      

  6.   

    procedure TCRSH.setcomb;
    begin
    with adoqueryDW do
    begin//这里加
    sql.close;sql.Clear;
    sql.Add('select 单位名称 from 单位类别表');