社区
C++ Builder
帖子详情
listview中数据量大时带来的问题
studyprogram
2003-11-07 09:20:27
现在是程序动态生成listview的列的名称,然后从数据库一条条的读数据,然后将listview的每一列赋值,这样非常的慢,界面上看出来很难受? 怎么解决。谢谢
...全文
93
5
打赏
收藏
listview中数据量大时带来的问题
现在是程序动态生成listview的列的名称,然后从数据库一条条的读数据,然后将listview的每一列赋值,这样非常的慢,界面上看出来很难受? 怎么解决。谢谢
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
echocheng
2003-11-08
打赏
举报
回复
呵呵,楼上的回复我前两天搜贴时还看到过的
freshman2003
2003-11-08
打赏
举报
回复
下文为暴走-银狼所作,本人转帖。
采用常规方法处理ListView,在数据量大时无论是还是用了BeginUpdata和EndUpdata()还是处理WM_EraseBkgnd信息都不会得到理想的效果,那答案是什么呢?
嗯,采用所谓Virtual ListView。
说起来很神秘,其实点通了很简单。
在于把ListView->OwnerData设为true,然后直接设置
ListView->Items->Count为数据总数,实际的数据可以保在任意其它速度较快且可直接索引的容器里(如STL中的vector),然后关键是在OnData事件中写入代码通过Item->Index从容器中(如vector)取出数据,然后用
Item->Caption = ???;
Item->SubItems->Add(???);
Item->SubItems->Add(???);
来动态的写入数据到ListView用于UI显示,如此Virtual ListView即完成.
一个完整的简单例子如下:
/*Unit1.h*/
//---------------------------------------------------------------------------
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ComCtrls.hpp>
#include <vector>
using namespace std;
//---------------------------------------------------------------------------
struct ListViewData
{
AnsiString Caption;
AnsiString SubItems1;
AnsiString SubItems2;
AnsiString SubItems3;
};
class TForm1 : public TForm
{
__published: // IDE-managed Components
TListView *ListView1;
void __fastcall ListView1Data(TObject *Sender, TListItem *Item);
private: // User declarations
vector<ListViewData*> m_lvDataVector;
public: // User declarations
__fastcall TForm1(TComponent* Owner);
__fastcall ~TForm1();
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
/*unit1.cpp*/
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
ListView1->OwnerData = true;
const int iListViewCount = 5000;
ListView1->Items->Count = iListViewCount;
for(int i = 0; i < iListViewCount; ++i) {
ListViewData *plvData = new ListViewData;
plvData->Caption = "Caption" + AnsiString(i);
plvData->SubItems1 = "SubItems1" + AnsiString(i);
plvData->SubItems2 = "SubItems2" + AnsiString(i);
plvData->SubItems3 = "SubItems3" + AnsiString(i);
m_lvDataVector.push_back(plvData);
}
}
__fastcall TForm1::~TForm1()
{
int iCount = ListView1->Items->Count;
for(int i = 0; i < iCount; ++i) {
ListViewData *plvData = m_lvDataVector[i];
delete plvData;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ListView1Data(TObject *Sender, TListItem *Item)
{
ListViewData *plvData = m_lvDataVector[Item->Index];
Item->Caption = plvData->Caption;
Item->SubItems->Add(plvData->SubItems1);
Item->SubItems->Add(plvData->SubItems2);
Item->SubItems->Add(plvData->SubItems3);
}
pscj
2003-11-08
打赏
举报
回复
用listview->items->beginupdate();
listview->items->endupdate()试试
qibo999
2003-11-07
打赏
举报
回复
你可以查一查以前有一篇关于listview快速排序的帖子,目的一样。
hzhxxx
2003-11-07
打赏
举报
回复
自己看看 bcb 的
emaples\VirtualListView 的工程,他告诉你 cb 步一样的表现数据方式
listview
中
嵌套gridview
在Android开发
中
,
ListView
和GridView是两种常用的布局控件,它们用于展示大量数据。
ListView
以其垂直滚动和可自定义项视图的特点,而GridView则以网格形式排列元素,适合显示多列、等宽或等高的内容。当需要在一个...
listview
中
添加checkbox实现多选操作
问题
在实际项目
中
,还可以考虑优化
ListView
的性能,比如使用ViewHolder模式减少findViewById的次数,以及在
数据量
较
大时
采用异步加载和分页显示。 总的来说,实现
ListView
中
Checkbox的单选或多选操作涉及自定义适配器、...
Node.js-scrollView包含
listview
解决
listview
数据加载不出来的
问题
然而,在某些场景下,我们可能会将
ListView
嵌套在ScrollView
中
,这样的布局设计虽然能够满足特定的界面需求,但也会
带来
一些
问题
,尤其是数据加载不出来的现象。本文将深入探讨这个
问题
,并提供解决方案。 首先,...
listView
_关于数据绑定
在Android开发
中
,
ListView
是一种常见的用于展示大量数据的视图组件。然而,由于其内部的ViewHolder...在Quanzi_ArrayList这个示例
中
,我们可能可以看到如何应用这些原则来构建一个高效、无混乱的
ListView
数据展示。
android
listview
动态适应高度
问题
在默认情况下,
ListView
的高度会被自动设置为可以容纳所有可见项的高度,这在
数据量
较小或者每个项高度固定的场景下工作良好。但当我们面临以下情况时,
问题
就出现了: 1. 数据项数量不确定:例如,网络加载的数据...
C++ Builder
13,870
社区成员
102,693
社区内容
发帖
与我相关
我的任务
C++ Builder
C++ Builder相关内容讨论区
复制链接
扫一扫
分享
社区描述
C++ Builder相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章