tempad
Readygo技术搜索引擎 >>PHP技术 >> 有什么类似listview的控件,请推荐您觉得最好的

有什么类似listview的控件,请推荐您觉得最好的

Readygo技术搜索引擎 网络搜索 efish 2008-1-14 6:26:21

有什么类似listview的控件,请推荐您觉得最好的

楼主leonpard(猪哥哥)2002-05-14 14:32:35 在 C++ Builder / 基础类 提问

能告诉下载地址吗?或者   leonpard@163.com  
   
  ListView加载和排序太慢了,而且不能修改里面的每列的内容!!! 问题点数:20、回复次数:28Top

1 楼Wingsun(孙春阳)回复于 2002-05-14 15:34:49 得分 0

怎么会呢,速度的问题你可以看看专题中的相关文章,改变每一列的内容我看不懂,难道  
  Item->SubItems->Stirngs="";  
  不行Top

2 楼leonpard(猪哥哥)回复于 2002-05-14 18:43:06 得分 0

难道你可以使用鼠标点击选中修改吗?Top

3 楼wangxd(东东)回复于 2002-08-05 15:30:47 得分 0

能Top

4 楼max_wzg(暴走-银狼)回复于 2002-08-05 16:00:26 得分 0

今晚给你Top

5 楼max_wzg(暴走-银狼)回复于 2002-08-05 22:49:06 得分 10

好了我来了:)  
  采用常规方法处理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;  
                  delete   plvData;  
          }  
  }  
  //---------------------------------------------------------------------------  
   
  void   __fastcall   TForm1::ListView1Data(TObject   *Sender,   TListItem   *Item)  
  {  
          ListViewData   *plvData   =   m_lvDataVector;  
          Item->Caption   =   plvData->Caption;  
          Item->SubItems->Add(plvData->SubItems1);  
          Item->SubItems->Add(plvData->SubItems2);  
          Item->SubItems->Add(plvData->SubItems3);  
  }  
  //---------------------------------------------------------------------------  
  速度很快,5000条数据只要1秒左右.  
  Top

6 楼wyb_45(小兵)回复于 2002-08-15 11:02:39 得分 0

Raize控件可以替代BCB的标准控件,功能更强,更好Top

7 楼yeeeye(天)回复于 2002-08-15 11:18:21 得分 0

hi,max_wzg(暴走-银狼)    
  我用你这个程序,run的时候出错,这句  
  ListViewData   *plvData   =   m_lvDataVector;  
  有问题,说什么内存访问出错  
  到底怎么回事啊?Top

8 楼max_wzg(暴走-银狼)回复于 2002-08-30 13:23:21 得分 0

to   yeeeye(天)  
  你大概修改了上面的程序,数据插入操作没有在TForm1::TForm1中进行,  
  原因出在OnData事件的激发条件上,OnData事件的Item->Index会出现大  
  于ListView1->Items->Count的情况,同时也大于lvDataVector.size(),  
  这时m_lvDataVector自然就出错了,这是上面的程序应该  
  考虑面没有考虑的,应该写成:  
  void   __fastcall   TForm1::ListView1Data(TObject   *Sender,   TListItem   *Item)  
  {  
          if(Item->Index   >   m_lvDataVector.size())    
                  return;  
          ListViewData   *plvData   =   m_lvDataVector;  
          Item->Caption   =   plvData->Caption;  
          Item->SubItems->Add(plvData->SubItems1);  
          Item->SubItems->Add(plvData->SubItems2);  
          Item->SubItems->Add(plvData->SubItems3);  
  }Top

9 楼almser(苏格拉底)回复于 2002-08-30 13:46:12 得分 0

好方法Top

10 楼yuliangpei(踏雪无痕)回复于 2002-08-30 16:23:25 得分 10

兄弟:  
  你的程序想法及效果,可以说很完美了。但是完美之中还有一点小小的瑕疵,此处应该是这样的:  
  __fastcall   TForm1::TForm1(TComponent*   Owner)  
                  :   TForm(Owner)  
  {  
          ListView1->OwnerData   =   true;  
          const   int   iListViewCount   =   5000;  
          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);  
          }  
          ListView1->Items->Count   =   iListViewCount;  
  }  
  我以为是不是先来个FOR循环。共同进步!!!!!!Top

11 楼pzoon(杀死日本人)回复于 2002-09-22 18:00:21 得分 0

ListView加载和排序太慢了,而且不能修改里面的每列的内容!!!  
   
  怎么可能呢,我做过这个,很好用的,你看以下帮助,有例子Top

12 楼huzhangyou(信仰(http://www.libing.net.cn))回复于 2002-09-28 22:05:59 得分 0

不错  
  呵呵  
  Top

13 楼leonpard(猪哥哥)回复于 2002-09-29 11:59:40 得分 0

我的意思是用鼠标点击选中,然后修改,象stringgrid那样Top

14 楼xinqc(新)回复于 2002-10-21 14:26:07 得分 0

应该不能在界面上修改每列的内容,去看看有没有控件吧Top

15 楼Sword_Light(三尺水)回复于 2002-12-12 12:09:07 得分 0

ListView控件本来就很好吗!速度慢主要是你添加数据的方法不太好,不应该一次性地将所有的数据都添加进去,应该是显示多少,添加多少,这样速度就快了,同样道理,TreeView控件也是这个道理   :)Top

16 楼cker(〖烟波浩淼三千里、人鬼殊途五百年〗)回复于 2002-12-14 13:31:33 得分 0

inplace   edit么。  
  没什么,自己放一个edit动态调节位置和大小就可以就地编辑了Top

17 楼myy()回复于 2002-12-14 18:30:46 得分 0

TVirtualTree相当于TTreeView+TListView+   (TStringGrid   或   TDrawGrid),底图,节点级的Checked,Disabled,Visibled,HotTrack...,节点遍历,保存数据到流,到文件(rtf,html,txt...)  
  剪贴板支持,ole   &   vcl拖放支持,打印,排序,单元格编辑,Unicode支持,精细的外观和行为定制,太多太多功能,尤其在效率和图形方面,相当不错(具体可见help或demo).一旦拥有,别无所求!    
   
  http://www.delphi-gems.com/VirtualTreeview/VT.phpTop

18 楼thinker(老了老了)回复于 2002-12-16 14:19:56 得分 0

to   max_wzg(暴走-银狼):  
  采用这个方法,很多ListView的事件和方法就不可用了.  
  比如:排序,FindCaption等,不知道老兄是否有别的办法解决?Top

19 楼lingyunfeipu(凌云)回复于 2002-12-16 14:34:39 得分 0

好像checkbox   也不能用了Top

20 楼max_wzg(暴走-银狼)回复于 2002-12-16 15:16:20 得分 0

排序,FindCaption等当然就要对自己的数据(这里是ListViewData)进行了。Top

21 楼leonpard(猪哥哥)回复于 2002-12-16 16:10:02 得分 0

好象都得自己搞定是不是。Top

22 楼lingyunfeipu(凌云)回复于 2002-12-16 16:37:59 得分 0

能告诉我怎样显示checkbox   吗?  
  Top

23 楼leonpard(猪哥哥)回复于 2002-12-17 11:33:25 得分 0

to   lingyunfeipu:  
  ListView本来就有一个属性叫CheckBox,设为true就可以了Top

24 楼lingyunfeipu(凌云)回复于 2002-12-17 13:19:26 得分 0

我试过了,设为true   但是   CheckBox却显示不出来  
  Top

25 楼leonpard(猪哥哥)回复于 2002-12-17 14:11:05 得分 0

不会吧????Top

26 楼hjhwfw(wfw)回复于 2002-12-19 16:34:01 得分 0

能否讨论一下ListView的Click事件?为什么在ListView中选择多个图标,在没有放开鼠标前将鼠标移出ListView,click事件就不执行??怎样让click执行??Top

27 楼xin_ni(心尘)回复于 2002-12-19 19:39:09 得分 0

Click是由mousedown和mouseup两个事件组成的嘛。在别的地方放开鼠标,click事件当然不执行了。Top

责任编辑: efish 参与评论 查找更多:
相关文章
XML求救: 怎樣用OpenXML生成一個紀錄集? XML求救: 怎樣用OpenXML生成一個紀錄集?
如何不补全信息而添加新记录(就是允许有的字段的值… 如何不补全信息而添加新记录(就是允许有的字段的值为空)?
我的表某列为idtity,如何得知我将要插入的行sql ser… 我的表某列为idtity,如何得知我将要插入的行sql server会给我哪个id呢,
关于如何实时检测文本控件的输入字符问题? 关于如何实时检测文本控件的输入字符问题?
程序中使用了Interbase,使用的是ibdatabase组件,没… 程序中使用了Interbase,使用的是ibdatabase组件,没有用BDE。运行程序的机器上是否必须安装Interbase Server?我把gds32.dll安装到客户
紧急求援!编译能通过,但就不能执行!各位大大有什… 紧急求援!编译能通过,但就不能执行!各位大大有什么高招??
Powerdesigner的优点以及缺点讨论以及如何设置字段的… Powerdesigner的优点以及缺点讨论以及如何设置字段的中文header以及label,来者有份...
小第想实现让一个程序自已删除自已,请各位大侠不吝… 小第想实现让一个程序自已删除自已,请各位大侠不吝赐教
关于按钮创建问题,高手请回答,谢谢 关于按钮创建问题,高手请回答,谢谢
如何把一台服务器上的SQL SERVER中的所有东西完全移… 如何把一台服务器上的SQL SERVER中的所有东西完全移植到另一台服务器上的SQL SERVER上
2秒记住本站域名

玩过泡泡龙吗?Readygo?Go! 再加上.Com.Cn的后缀,那就是大名小顶的readygo.com.cn

分类导航
Readygo技术搜索引擎