用了LISTVIEW来显示数据库查询结果,数据库中的记录每条数据都有自增量的字段AUTO_ID,用DBGRID的话这个字段不显示也能知道选中的数据序号,可以根据这个序号做修改之类的事情,但是用LISTVIEW后,这个字段在界面上不能显示,哪如何知道在LISTVIEW中选的数据对应的是数据库里序号是多少的数据?或者说对应到相应的数据上?

解决方案 »

  1.   

    这个data属性怎么使用?举个例子吧
      

  2.   

    楼主,你其实可以自己额外的再建立一个 TStrings 变量在向 TListView 组件里添加信息的同时把那条数据的自动编号添加到这个变量里里,这样他俩的 Index 不就同步了吗,然后你 用 ListView.Selected.Index 就可以同步的在 TStrings 里找到对应的自动编号了啊,不一定非要单恋一只花吧给你个简单的例子,其实一点也不难,也没有增加多大的工作量var
      strList: TStrings;
      i: Integer;
    begin
      strList:= TStringList.Create;
      ListView.Clear;
      for i:= 0 to 3 do
      begin
        with ListView.Items.Add do
        begin
          strList.Append(IntToStr(i));
          Caption:= 'String' + IntToStr(i);
        end;
      end;
      ShowMessage(strList.Text);
    end;
      

  3.   

    当然如果你是显示所有数据,而不是在查询工作,并且你的记录里面不会有重复的数据那也可以用OnData事件来完成,具体的我就不在这里多说了,提供给你网址,你去看看吧:http://crazycoder.cn/Delphi/Article11649.html
      

  4.   

    procedure Tform_fw_select.BitBtn1Click(Sender: TObject);
    var
       p:^integer;
    begin
       if apart_list.Selected =nil then exit;
       p:=Apart_list.Selected.Data;
       fwid:=p^;
       recordset_temp.SQL.Clear ;
       recordset_temp.SQL.Add ('Select * From [FWXM] Where  [FW_ID]=' + inttostr(p^));
       recordset_temp.Open ;
       if recordset_temp.RecordCount <>0 then
       begin
          fwname:=recordset_temp.Fields[1].AsString ;
          fwmoney:=recordset_temp.Fields[3].AsFloat ;
          recordset_temp.Close;
          close;
       end;
       recordset_temp.close ;
    end;
    我们尽量还是用控件ADOquery来操作吧
      

  5.   

    我软件也有这用法。我直接用 caption 设置为 0 宽度,里面放 ID 值
      

  6.   

    最方便的方法应该是像6楼说的,设置1列Column的Width属性为0用listview.selected取得选中的行後,caption就是第0列,其它列用SubItems[i]取得0<= i < n
      

  7.   

    同意6楼,当然放DATA里面也好,用指针来取
      

  8.   

    caption 设置为 0这个方法不行,用鼠标在标题栏上是可以把隐藏的拖出来的
      

  9.   

    caption 设置为 0这个方法不行,用鼠标在标题栏上是可以把隐藏的拖出来的 
     
    还有一个最大宽度设置为1 就可以了
      

  10.   

     Width := 0;  MaxWidth := 1;