首先 Tlistview 是从文本文件里读入数据的
文本格式如下
类型 名称 金额
0 汽车 100
1 大汽车 100在窗体里加了2个按纽    如果类型是0     那么Tlistview 只ADD  汽车这个
如果 类型是1  那么 Tlistview  就ADD  大汽车 这个如果想修改 名称  把汽车修改成  小汽车  那么 Tlistview 保存  内容为 文本  就只保存了 小汽车这个 其他所有都没了     Tlistview 没有隐藏功能 我也想过用两个 Tlistview     一个是 分类的     一个隐藏 用来显示全部的
但是  得同步              
请高人指点下           小弟没多少分  先给100分吧

解决方案 »

  1.   

    关于TListView内容保存的问题,你需要定义一个数据结构能够保存你文本文件中每一行的所有信息,然后将这个数据结构的地址赋给对应Node的Data属性,修改“名称”时,不能仅修改Node的Text属性值,那个仅是表面的,同时还需要修改对应数据结构中的内容。保存时不能用TListView自带的SaveToFile方法,那个只会保存Node的Text内容和层次关系,你需要像自己写个方法将Node.Data指定的内容保存到文件中。
      

  2.   

    没有隐藏功能,但你可以把listview中ADD的一列高度设置为0,就相当于隐藏了啊,具体没做过
      

  3.   

    chris_mao   你说的对  但是     他拿Tlistview修改了  我怎么获得索引  来修改data里的?       
      

  4.   

    type
    PCar = ^TCar;
    TCar = packed record 
      Kind: Integer;
      Name: String;
      Price: Currency;
    end;//加载文本文件到TListView的时候,文件的打开、读取与关闭操作略
    //假设每一行的三个信息已读取到变量iKind, sName和cPrice中
    var
      Car: PCar;
    begin
      ....
      car := AllocMem(SizeOf(TCar));
      car^.Kind := iKind;
      car^.Name := sName;
      car^.Price := cPrice;
      Node.Data := Car;
      ....
    end;//保存的操作正好和上面反过来,此处就不在赘述//修改的时候
    ///////
    PCar(Node.Data)^.Name := '小汽车';
    PCar(Node.Data)^.Price := 200;
    .......
      

  5.   

    获取当前结点的索引: TreeView1.Selected.Index
      

  6.   

    chris_mao   不明白  能说的详细点吗?
      

  7.   

    看你文件的结构,你在加载和保存时,肯定不会用TListView自带的LoadFromFile和SaveToFile方法吧!?肯定是自己写的加载和保存的方法,你可以你写的加载方法中将数据加载到TCar中,并让Node的Data指向这个数据;同样在保存时将Node的Data指向的TCar中的数据回写到文本文件中即可呀。
      

  8.   

    定义一个TList来保存数据,显示的时候筛选就可以了:uses
      SysUtils;type
      //每条数据的结构体,可以根据需要进行增删
      pDataRec = ^TDataRec;
      TDataRec = record
        FType : integer;     //类型
        FName : string;      //名称
        FPrice: integer;     //价格
      end;var
      g_DataLst: TList = nil;//下面是对这个列表进行管理的
    procedure CreateLst;
    begin
      g_DataLst:= TList.Create;
    end;procedure FreeLst;
    var
      m_iTmp: integer;
    begin
      if not Assigned(g_DataLst) then exit;  for m_iTmp:= 0 to g_DataLst.Count - 1 do
      begin
        Dispose(pDataRec(g_DataLst.Item[m_iTmp]));
      end;  FreeAndNil(g_DataLst);
    end;procedure AddData(AIndex: integer; AName: string; APrice: integer);
    var
      m_pData: pDataRec;
    begin
      if not Assigned(g_DataLst) then
        g_DataLst:= TList.Create;  //这里没有判断重复的纪录  new(m_pData);
      with m_pData do
      begin
        FType := AIndex;
        FName := AName;
        FPrice:= APrice;
      end;  g_DataLst.Items.Add(@AData);
    end;procedure DeleteData(AType: integer);
    var
      m_iTmp: integer;
    begin
      if not Assigned(g_DataLst) then exit;  for m_iTmp:= 0 to g_DataLst.Count - 1 do
      begin
        if pDataRec(g_DataLst.Items[m_iTmp]).FType = AType then
        begin
          Dispose(pDataRec(g_DataLst.Items[m_iTmp]));
          g_DataLst.Delete(m_iTmp);
          exit;
        end;
      end;
    end;--------------------------------------------
    //显示某一种类型的数据
    procedure TForm1.Button1Click(Sender: TObject);
    var
      m_iTmp: integer;
      m_Item: TListItem;
    begin
      if not Assigned(g_DataLst) then exit;  //清除原来所有的数据
      ListView1.Items.Clear;  //将类型为Button1.Tag的全部添加进来
      for m_iTmp:= 0 to g_DataLst.Count - 1 do
      begin
        if (pDataRec(g_DataLst.Items[m_iTmp]).FType = Button1.Tag) then
        begin
          //在这里显示
           m_Item:= ListView1.Items.Add;
          m_Item.Caption:= IntToStr(pDataRec(g_DataLst.Items[m_iTmp]).FType); 
          m_Item.SubItems.Add(pDataRec(g_DataLst.Items[m_iTmp]).FName);
          m_Item.Caption:= IntToStr(pDataRec(g_DataLst.Items[m_iTmp]).FPrice); 
        end;
      end;
    end;....
    其他的不写了。
      

  9.   

    Sorry,我9楼的回答误以为你用的是TTreeView控件了! :)
      

  10.   

    关键是怎么写回到 文本  for?   还是什么?
      

  11.   

    etomahawk   有没有修改的啊?  我要实现的就是修改
      

  12.   

    你是怎么读到ListView中的呢?一样的方法呀,不过是个逆操作而已。
      

  13.   

    我就是不明白  比如 在listview中  修改了  名称  比如 小汽车   但是  怎么实现了修改了DATA呢?
      

  14.   

    PCar(ListView1.Selected.Data)^.Name := '小汽车';