求助有关 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分吧
...全文
214 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不怎么熟悉,
内容概要:本文详细介绍了MySQL中InnoDB存储引擎的逻辑存储结构及其表分区技术。InnoDB的逻辑存储单元由高到低依次为表空间、段、区、页和行,其中表空间包括系统表空间、独立表空间、通用表空间、Undo表空间和临时表空间,每种表空间具有不同的用途和管理方式。文章进一步讲解了表分区的概念与类型,包括RANGE、LIST、HASH、KEY以及多字段COLUMNS分区,阐述了分区的优势如提升查询性能、便于数据维护、支持跨物理设备存储等,并列举了实际SQL操作示例,帮助理解分区表的创建、修改、删除及重组等操作。同时指出了分区的限制条件,如最大分区数量、主键约束要求等。; 适合人群:具备一定MySQL数据库基础,从事数据库开发、运维或架构设计的技术人员,尤其是工作中涉及大数据量表管理与性能优化的1-3年经验研发人员。; 使用场景及目标:①深入理解InnoDB存储机制,优化数据库物理结构设计;②掌握表分区技术,应用于海量数据存储与高效查询场景,如日志系统、订单系统的时间分区设计;③通过分区实现数据归档、快速删除历史数据、提升查询性能等运维目标; 阅读建议:学习时应结合MySQL实际环境动手实践文中提供的SQL命令,重点关注表空间管理和分区策略的选择,理解其对性能和维护的影响,并注意分区使用中的限制条件以避免设计失误。
内容概要:本文系统介绍了GitHub Copilot的实战使用技巧,涵盖其核心功能、提示工程、上下文管理、自定义配置及常见误区。文章强调Copilot不仅是代码补全工具,更是覆盖软件开发全生命周期的AI编程助手,重点讲解如何通过上下文工程、提示词结构化、斜杠命令与聊天参与者等方式提升代码生成质量,并结合实战案例展示在测试生成、代码重构、调试、文档编写等场景中的高效应用。同时指出Copilot的局限性,倡导“人为主导、AI辅助”的协作模式,强调代码审查与安全合规的重要性。; 适合人群:具备一定编程经验,希望提升开发效率的个人开发者、团队工程师及技术管理者,尤其是正在使用或计划引入AI编程工具的研发人员。; 使用场景及目标:①掌握Copilot在测试生成、代码解释、重构优化、调试排错等方面的高级用法;②学会构建高质量提示词与自定义指令,使AI输出更贴合项目规范;③规避常见使用陷阱,实现安全、可控、高效的AI辅助开发。; 阅读建议:此文档兼具理论指导与实操示范,建议结合实际开发环境边学边练,重点关注提示工程、上下文管理与自定义指令配置,持续迭代优化使用方式,并在团队中建立统一的AI编码规范与审查机制。

5,943

社区成员

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

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