求助有关 Tlistview 控件 100分相送

renaihaore 2007-11-15 07:52:19
首先 Tlistview 是从文本文件里读入数据的
文本格式如下
类型 名称 金额
0 汽车 100
1 大汽车 100

在窗体里加了2个按纽 如果类型是0 那么Tlistview 只ADD 汽车这个
如果 类型是1 那么 Tlistview 就ADD 大汽车 这个

如果想修改 名称 把汽车修改成 小汽车 那么 Tlistview 保存 内容为 文本 就只保存了 小汽车这个 其他所有都没了 Tlistview 没有隐藏功能

我也想过用两个 Tlistview 一个是 分类的 一个隐藏 用来显示全部的
但是 得同步


请高人指点下 小弟没多少分 先给100分吧
...全文
153 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
禹爸爸 2007-11-15
  • 打赏
  • 举报
回复
PCar(ListView1.Selected.Data)^.Name := '小汽车';
renaihaore 2007-11-15
  • 打赏
  • 举报
回复
我就是不明白 比如 在listview中 修改了 名称 比如 小汽车 但是 怎么实现了修改了DATA呢?
禹爸爸 2007-11-15
  • 打赏
  • 举报
回复
你是怎么读到ListView中的呢?一样的方法呀,不过是个逆操作而已。
renaihaore 2007-11-15
  • 打赏
  • 举报
回复
etomahawk 有没有修改的啊? 我要实现的就是修改
renaihaore 2007-11-15
  • 打赏
  • 举报
回复
关键是怎么写回到 文本 for? 还是什么?
renaihaore 2007-11-15
  • 打赏
  • 举报
回复
等等 我先研究下啊 有点晕晕的
禹爸爸 2007-11-15
  • 打赏
  • 举报
回复
Sorry,我9楼的回答误以为你用的是TTreeView控件了! :)
etomahawk 2007-11-15
  • 打赏
  • 举报
回复
定义一个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;

....
其他的不写了。
禹爸爸 2007-11-15
  • 打赏
  • 举报
回复
看你文件的结构,你在加载和保存时,肯定不会用TListView自带的LoadFromFile和SaveToFile方法吧!?肯定是自己写的加载和保存的方法,你可以你写的加载方法中将数据加载到TCar中,并让Node的Data指向这个数据;同样在保存时将Node的Data指向的TCar中的数据回写到文本文件中即可呀。
renaihaore 2007-11-15
  • 打赏
  • 举报
回复
哦 原来你上面加代码了啊 我没看到 晕 我看下哦
renaihaore 2007-11-15
  • 打赏
  • 举报
回复
chris_mao 不明白 能说的详细点吗?
禹爸爸 2007-11-15
  • 打赏
  • 举报
回复
获取当前结点的索引: TreeView1.Selected.Index
禹爸爸 2007-11-15
  • 打赏
  • 举报
回复
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;
.......
renaihaore 2007-11-15
  • 打赏
  • 举报
回复
chris_mao 你说的对 但是 他拿Tlistview修改了 我怎么获得索引 来修改data里的?
gjw310 2007-11-15
  • 打赏
  • 举报
回复
没有隐藏功能,但你可以把listview中ADD的一列高度设置为0,就相当于隐藏了啊,具体没做过
禹爸爸 2007-11-15
  • 打赏
  • 举报
回复
关于TListView内容保存的问题,你需要定义一个数据结构能够保存你文本文件中每一行的所有信息,然后将这个数据结构的地址赋给对应Node的Data属性,修改“名称”时,不能仅修改Node的Text属性值,那个仅是表面的,同时还需要修改对应数据结构中的内容。保存时不能用TListView自带的SaveToFile方法,那个只会保存Node的Text内容和层次关系,你需要像自己写个方法将Node.Data指定的内容保存到文件中。
jhldelphi 2007-11-15
  • 打赏
  • 举报
回复
路过
顶下;
Tlistview不怎么熟悉,

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧