powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Медленная работа ListView
25 сообщений из 26, страница 1 из 2
Медленная работа ListView
    #35657952
Иван4444
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Думаю с этой проблемой сталкивались многие, хотелось бы узнать кто как с ней справился.
Имеется ListView:

Код: plaintext
1.
2.
3.
Grid        = CreateWindowW(TEXT("SysListView32"),TEXT(""),WS_VISIBLE | WS_CHILD | WS_BORDER |LVS_REPORT | LVS_SINGLESEL, maxX-(( 98 *maxX)/ 100 ), maxY-(( 91 *maxY)/ 100 ), maxX-(( 4 *maxX)/ 100 ), (maxY-(maxY* 40 / 100 )),hWnd,(HMENU)IDM_Grid,g_hInst,NULL);

SendMessage(Grid ,LVM_SETEXTENDEDLISTVIEWSTYLE,LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES , LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES| LVS_SINGLESEL);

Есть кнопочка, по нажатии на которую происходит заполнение таблицы случайными данными:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
case IDM-MyButton:
{
            ShowWindow(Grid,false);
				
	    LV_COLUMN lvc;
	    LV_ITEM lvi;

	    lvc.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT;	 
	    lvc.fmt  = LVCFMT_LEFT;				 //  текст выравниваем по левой стороне
	    lvc.cx= 60 ;					                //  ширин строки по умолчанию
	    lvi.mask = LVIF_TEXT | LVIF_PARAM ;		     //   параметры строчки
						
					
            lvc.pszText  = (LPWSTR)L"dsfdsf";
	    lvc.cx		  =  60 ;										
	    for(int j= 0 ;j< 6 ;j++)
		{
			lvc.iSubItem = j;
			ListView_InsertColumn(Grid, j, &lvc);	
		}
									
	     for(int i = 0 ;i< 1000 ;i++)
		{
			for(int j= 0 ;j< 6 ;j++)
				{
					lvi.iSubItem = j;                                            // столбец
					lvi.iItem    = i;	                 		       // строка
					lvi.pszText  = (LPWSTR)L"werwr";                    // текст
					ListView_InsertItem (Grid,&lvi);
					ListView_SetItemText(Grid,lvi.iItem,lvi.iSubItem,(LPWSTR)lvi.pszText);
				}
		}
	        ShowWindow(Grid,true);
}

ShowWindow(Grid,true); и соответственно ShowWindow(Grid,false); - для того чтобы не вызывалась перерисовка.

Как видите все значения взяты на "шару", только для представления данного примера; в общем то заполняем значит 1000 строк в 6 столбцов, и это происходит аж 5 сек,а то и 6 !!! (на КПК, под управлением WinCE). - что непозволительно долго
Прошу помочь мне, скажите что не так.
...
Рейтинг: 0 / 0
Медленная работа ListView
    #35657988
Ой Вэй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если вызвать сначала SetItemCount()?
...
Рейтинг: 0 / 0
Медленная работа ListView
    #35658202
Алексей Морозов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я предлагаю сразу отказаться от ListView в пользу какого нибудь грида.


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Медленная работа ListView
    #35658231
Иван4444
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>>А если вызвать сначала SetItemCount()?
В реальной задаче заранее не известно кол-во item'ов, все данные берутся из БД и на "лету" заполняются в таблицу. Делать же два цикла (сначала считаем кол-во, потом заполняем) - это не выход ((

>>Я предлагаю сразу отказаться от ListView в пользу какого нибудь грида.
Что именно можно использовать? что посоветуете?.. пишу на чистом API.
...
Рейтинг: 0 / 0
Медленная работа ListView
    #35658253
Алексей Морозов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Что именно можно использовать? что посоветуете?.. пишу на чистом API.

Можно посмотреть компоненты OCX, ActiveX.
Можно написать самому, я могу небольшой рабочий пример подкинуть.


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Медленная работа ListView
    #35658265
Алексей Морозов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Очень похоже на ListView.
1) Но поддерживат только режим работы
2) Но не поддерживат редактирования в ячейке (ListView это позволяет лишь в первой колонке)
3) Где то есть мелкие недочности.
...
Рейтинг: 0 / 0
Медленная работа ListView
    #35658389
Иван4444
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Счас посмотрю ) большое спасибо! )))
ЗЫ: для ввода в ячеку вызываю дилог с Editom и кнопочкой ОК ;).. но ранне здесь же на форуме обсуждалась данная тема, и проблема с вводом непосредственно в ячейку была решена.
...
Рейтинг: 0 / 0
Медленная работа ListView
    #35658400
Алексей Морозов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иванно ранне здесь же на форуме обсуждалась данная тема, и проблема
с вводом непосредственно в ячейку была решена.

15 строк кода

1) Создать Edit на гриде и правильно разместить его над ячейкой
2) Перемещать или скрывать его в каких то случаях.


Posted via ActualForum NNTP Server 1.4

Модератор: Тема перенесена из форума "C++".
...
Рейтинг: 0 / 0
Медленная работа ListView
    #35658725
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
case IDM-MyButton:
{
            ShowWindow(Grid,false);
				
	    LV_COLUMN lvc;
	    LV_ITEM lvi;

	    lvc.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT;	 
	    lvc.fmt  = LVCFMT_LEFT;				 //  текст выравниваем по левой стороне
	    lvc.cx= 60 ;					                //  ширин строки по умолчанию
	    lvi.mask = LVIF_TEXT | LVIF_PARAM ;		     //   параметры строчки
						
					
            lvc.pszText  = (LPWSTR)L"dsfdsf";
	    lvc.cx		  =  60 ;										
	    for(int j= 0 ;j< 6 ;j++)
		{
			lvc.iSubItem = j;
			ListView_InsertColumn(Grid, j, &lvc);	
		}
									
	     for(int i = 0 ;i< 1000 ;i++)
		{
			for(int j= 0 ;j< 6 ;j++)
				{
					lvi.iSubItem = j;                                            // столбец
					lvi.iItem    = i;	                 		       // строка
					lvi.pszText  = (LPWSTR)L"werwr";                    // текст
					ListView_InsertItem (Grid,&lvi);

// во-первых, создание итема надо вынести из цикла по колонкам - итем ОДИН, колонок у него МНОГО.
// а так в итоге ты создаёшь в 6 раз больше строк, чем нужно.

					ListView_SetItemText(Grid,lvi.iItem,lvi.iSubItem,(LPWSTR)lvi.pszText);
				}
		}
	        ShowWindow(Grid,true);
}

ShowWindow(Grid,true); и соответственно ShowWindow(Grid,false); - для того чтобы не вызывалась перерисовка.

Надо использовать LockWindowUpdate() , а не show/hide.


А в третьих надо использовать virtual list view. Это спец. режим работы, когда все данные НЕ ХРАНЯТЬСЯ в ListView, а запрашиваются у приложения при отображении.

Поищи на MSDN именно по "virtual list view" -- легко найдёшь хорошую статью о том, как это делается.
...
Рейтинг: 0 / 0
Медленная работа ListView
    #35658731
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
что-то другое кроме ListView имеет смысл использовать лишь если нужна кроссплатформенность или
какие-то out-of the-box фичи. ListView достаточно мощный и быстрый, надо только уметь им пользоваться.
Мы пробовали кроме него MSflexGrid ActiveX, но особого восторга по его скорости и неглюковитости не было -- и медленный, и глюковатый.
...
Рейтинг: 0 / 0
Медленная работа ListView
    #35659711
Иван4444
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>>// а так в итоге ты создаёшь в 6 раз больше строк, чем нужно.
Тоесть мне вынести ListView_InsertItem (Grid,&lvi); ? - в таком случае у меня грид получается пустой..
я так понял что ListView_InsertItem (Grid,&lvi); - как бы "ячейку" вставляет.
...
Рейтинг: 0 / 0
Медленная работа ListView
    #35659726
Иван4444
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а операция: lvi.iItem = i; - не существенна в данном случае.
...
Рейтинг: 0 / 0
Медленная работа ListView
    #35659733
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван4444 пишет:

> Тоесть мне вынести ListView_InsertItem (Grid,&lvi); ? - в таком случае у
> меня грид получается пустой..

ListView_InsertItem - создаёт СТРОКУ. Соответственно, положите его
в тело цикла по строкам, а не по колонкам строк.

> я так понял что ListView_InsertItem (Grid,&lvi); - как бы "ячейку"
> вставляет.

Нет. Item- строка. Колонка - Subitem.
Иногда также (на самом деле везде в документации) при
описании поля 0 в строке говорят, что это - item, а
всех остальных - что это subitem.

Т.е. Item - это вся строка и нулевая её колонка.
Subitem - все осталные колонки.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Медленная работа ListView
    #35659774
Иван4444
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вы и вправду МАСТЕР, MasterZiv )))
... когда только создавал свою табличку, то в качестве iSubItema, в голову не приходило вручную ствить 0 .
Потому решил что это ячейка.
.. счас разберусь с виртуальными.. - если есть у кого небольшой код, в качестве примера, типа того что привел я, то буду оч рад!.. Всем заранее спасибо!
...
Рейтинг: 0 / 0
Медленная работа ListView
    #35661604
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван4444 пишет:

> .. счас разберусь с виртуальными.. - если есть у кого небольшой код, в
> качестве примера, типа того что привел я, то буду оч рад!.. Всем заранее
Я говорил, в MSDN поищите, там есть подробнейшие примеры.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Медленная работа ListView
    #35678172
Иван4444
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чтот не могу понять как именно заполняется virtual list view,
делаю это следующим образом:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
 if(((LPNMHDR)lParam)->hwndFrom == mw.Grid )
 {
   NMHDR* pnmh = (NMHDR*) lParam;

   switch(pnmh->code)
   {
	case LVN_GETDISPINFO:
	{
          LV_DISPINFO* pdi = (LV_DISPINFO*)lParam;
	  wstring SubItem;
         
          SubItem = L"Субитем";
          				
          pdi->item.mask  = LVIF_TEXT;				 
	  pdi->item.iItem = mw.Linenumber;

          pdi->item.iSubItem = mw.Colnumber;	
          ZeroMemory(iw, 6 );
	  _itow(mw.Colnumber,iw, 10 );
					
	  SubItem = SubItem + iw;
	  pdi->item.pszText    = (LPWSTR)SubItem.data();

          if(mw.Colnumber== 3 )          // Всего три колонки
	  {
		mw.Linenumber++;
		mw.Colnumber =  0 ;
	  }
            

        }
   }
 }

Реультат хотелось бы получить : колонка1 | колонка2 | колонка3 |
субитем0| субитем1 | субитем2 |
..... | ..... | .... |

но получается не совсем то что надо, и скажем при клике на какойнибудь элемент, все содержимое меняется.
ЗЫ: вся проблема осложняется тем, что работать он должен следующим образом - заполниться значениями из БД.
...
Рейтинг: 0 / 0
Медленная работа ListView
    #35678185
Иван4444
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вопрос есче в том, когда посылается, и сколько раз и с какой целью сообщение: LVN_GETDISPINFO
...
Рейтинг: 0 / 0
Медленная работа ListView
    #35678199
Иван4444
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я так понял, когда каждый раз перерисовка, но как тогда сделать так, чтоб list view был стабилен?
...
Рейтинг: 0 / 0
Медленная работа ListView
    #35678707
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван4444 пишет:

> вопрос есче в том, когда посылается, и сколько раз и с какой целью
> сообщение: LVN_GETDISPINFO
На первую клетку -- для всей строки, для её текста, иконки и состояний
и пр. лабуды. Потом - на все остальные ячейки.
И так для всех видимых строк.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Медленная работа ListView
    #35678708
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван4444 пишет:
> Чтот не могу понять как именно заполняется virtual list view,
> делаю это следующим образом:

Чтобы заполнить виртуальный LV, нужно только установить кол-во
колонок и кол-во item-ов. SetItemCount() кажется. Всё остальное
вытаскивается по требованию.

Маску, на сколько я помню, вы должны не заполнять,
а опрашивать, и заполнять поля, которые нужны.
Ваш код я вообще не понял. что вы там делаете - загадка.



> ЗЫ: вся проблема осложняется тем, что работать он должен следующим
> образом - заполниться значениями из БД.

Ну так самое то как раз для него.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Медленная работа ListView
    #35678713
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван4444 пишет:
> я так понял, когда каждый раз перерисовка, но как тогда сделать так,
> чтоб list view был стабилен?

Это что значит ?
Он и так стабилен.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Медленная работа ListView
    #35678765
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv пишет:

Вот как примерно должен выглядеть OnGetDisplayInfo

Код:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
void CTDBGridImpl::onGetDisplayInfo (NMHDR* pNMHDR, LRESULT* pResult)
{
	LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR;
	LV_ITEM* pItem = &pDispInfo->item;

   if( !m_dataSet || m_columns.empty() )
   {
   	*pResult = FALSE;
     return;
   }

	unsigned row = pItem->iItem;
	unsigned col = m_columns[pItem->iSubItem].fieldNoInDataSet(*m_dataSet);

   if( row >= m_dataSet->NRows() || col >= m_dataSet->NColumns() )
   {
   	*pResult = FALSE;
     return;
   }

	if( pItem->mask & LVIF_TEXT )
	{
     #ifdef _XDEBUG
       //TRACE( _T("ID %u : GetDisplayInfo TEXT item = %d, subitem = %d. Length 
%d.\n"), m_listCtrl->GetDlgCtrlID(), pItem->iItem, pItem->iSubItem, 
pItem->cchTextMax );
     #endif

     CTEXT::CTString displayVal;
     getCellText( row, col, displayVal );
     _tcsncpy( pItem->pszText, LPCTSTR(displayVal), pItem->cchTextMax );
	}

	if( pItem->mask & LVIF_IMAGE )
   {
     UINT listCtrlID = m_listCtrl->GetDlgCtrlID();
	  pItem->iImage = pItem->iIndent = 0;
     unsigned char stateImage = 0;
     unsigned char overLayImage = 0;

     if( !pItem->iSubItem )
     {
       if( m_exteriorProcessor &&
           m_exteriorProcessor->rowImages( listCtrlID, m_dataSet->Row(row), row, 
pItem->iImage, stateImage, overLayImage, pItem->iIndent )
         )
       {
         pItem->state = ( pItem->state & ~(LVIS_STATEIMAGEMASK|LVIS_OVERLAYMASK) 
) |
                        INDEXTOSTATEIMAGEMASK(stateImage) |
                        INDEXTOOVERLAYMASK(overLayImage);
       }
       if( m_exteriorProcessor )
         m_exteriorProcessor->fieldImage( listCtrlID, m_dataSet->Row(row), row, 
col, pItem->iImage );
     }
     else
     {
       if( m_exteriorProcessor )
         m_exteriorProcessor->fieldImage( listCtrlID, m_dataSet->Row(row), row, 
col, pItem->iImage );
     }
   }

	*pResult = FALSE;
}


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Медленная работа ListView
    #35679342
Иван4444
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, мои предыдущие сообщения и вправду выглядят не вполне ясно, попробую исправиться ))
вот для примера мой старый код для простого list view:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
InsertColumn(mw.Grid,mw.lvc, 0 ,L"Колонка1", 60 , 0 );
InsertColumn(mw.Grid,mw.lvc, 1 ,L"Колонка2", 60 , 1 );
InsertColumn(mw.Grid,mw.lvc, 2 ,L"Колонка3", 60 , 2 );
InsertColumn(mw.Grid,mw.lvc, 3 ,L"Колонка4", 60 , 3 );			
			
wstring rezult;
int lineNumber =  0 ;
while(EoF()!=true)
{
 NextData();

   InsertRow (mw.lvi,mw.Grid   ,lineNumber);
  
   InsertItem(mw.lvi,lineNumber, 0 ,GetTextByColName(L"Col1"),mw.Grid);
   InsertItem(mw.lvi,lineNumber, 1 ,GetTextByColName(L"Col2"),mw.Grid);
   InsertItem(mw.lvi,lineNumber, 2 ,GetTextByColName(L"Col3"),mw.Grid);
   InsertItem(mw.lvi,lineNumber, 3 ,GetTextByColName(L"Col4"),mw.Grid);

   lineNumber++;

}	
Finalize();

При этом заполнялся List view из БД. Все бы ничего, но долго.

счас же я пробовал поступить таким вот методом:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
switch(pnmh->code)
{
  case LVN_GETDISPINFO:				
  {
     if(mw.b_vt_switch ==  0 )
     {
	mw.b_vt_switch =  1 ;
	wstring SQL;			

	SQL.clear();
	SQL = L"select cln.VNAME,cln.VADRES,cln.NID from cln ORDER BY cln.VNAME";

	wstring err;
	err = ExecPrepare(SQL);

	if(err.empty()==false)
	{MessageBox(hWnd,err.data(),L"Error",MB_OK);}
	err.clear();
      }

       if(pdi->item.iSubItem ==  0 )				
       {
	 if(mw.b_vt_subitem_switch ==  0 )
	 {
	    NextData();
	    pdi->item.pszText = (LPWSTR)GetTextByColName(L"col1").data();
						
	    mw.b_vt_subitem_switch =  1 ;
	    mw.interest_count++;
	 }
	 else
	 {
		mw.b_vt_subitem_switch =  0 ;
	 }
      }
  
     if(pdi->item.iSubItem ==  1 )
     {
	pdi->item.pszText = (LPWSTR)GetTextByColName(L"col2").data();	
     }

      if(pdi->item.iSubItem ==  2 )
      {
	pdi->item.pszText = (LPWSTR)GetTextByColName(L"col3").data();
      }

      if(EoF() == true)
      {
	mw.b_vt_switch =  0 ;
	Finalize();
	ShowWindow(mw.Grid,true);
      }

Тепреь такая проблема: допустим у меня 100 записей, и по идее, если б я просто заполнял ListView,
то я бы прошелся по всем записям, заполнил ListView и выполнил файнолайз.
Но Virtual LIst View работает следующим образом: выводит только то что влазит в видимую часть.
Так у меня влазит 12 записей, (БД ждет следующего запроса, Finalize не вызвался), при прокрутке списка в них -все отрисовывается замечательно, но при прокрутке в верх, он выводит не предыдущую запись, а следующую из БД.

Так вот мне хочется ухнать, неужели нужно каждый раз при выхое перерисовки, сбрасиывать БД, затем в холостом ходе прокручивать до нужной позиции и делать вывод?
...
Рейтинг: 0 / 0
Медленная работа ListView
    #35681459
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван4444 пишет:

> while(EoF()!=true)
> {
> NextData();
>
> InsertRow (mw.lvi,mw.Grid ,lineNumber);
>
> InsertItem(mw.lvi,lineNumber,*0*,GetTextByColName(L"Col1"),mw.Grid);
> InsertItem(mw.lvi,lineNumber,*1*,GetTextByColName(L"Col2"),mw.Grid);
> InsertItem(mw.lvi,lineNumber,*2*,GetTextByColName(L"Col3"),mw.Grid);
> InsertItem(mw.lvi,lineNumber,*3*,GetTextByColName(L"Col4"),mw.Grid);
>
> lineNumber++;
>
> }
> Finalize();

в Virtual LIst View не нужно делать InsertItem.

> case LVN_GETDISPINFO:
> {
> if(mw.b_vt_switch == *0*)
> {
> mw.b_vt_switch = *1*;
> wstring SQL;
>
> SQL.clear();
> SQL = L"select cln.VNAME,cln.VADRES,cln.NID from cln ORDER BY cln.VNAME";
>
> wstring err;
> err = ExecPrepare(SQL);

Да вы чего, с ума сошли ? Вы что ж будете на обновление каждой ячейки запрос
выполнять ? Его надо выполнить один раз и созранить результат, а потом
показывать.

> Так у меня влазит 12 записей, (БД ждет следующего запроса, Finalize не
> вызвался), при прокрутке списка в них -все отрисовывается замечательно,
> но при прокрутке в верх, он выводит не предыдущую запись, а следующую из БД.

Это у вас неправильно что-то написано. Кроме того,
НЕЛЬЗЯ делать запрос внутри LVN_GETDISPINFO.
Это происходит очень часто и очень непредсказуемо.

> Так вот мне хочется ухнать, неужели нужно каждый раз при выхое
> перерисовки, сбрасиывать БД, затем в холостом ходе прокручивать до
> нужной позиции и делать вывод?

Ничего никуда сбрасывать не надо. Надо выполнить запрос, получить
его результат, сохранить, и потом показывать в ListView.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Медленная работа ListView
    #35681556
Иван4444
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Большое вам спасибо, вы мне реально помогли.
Меня смущало следующее, дело в том что если выполнить запрос и записать куда то - это схоже с тем что их записать в List View (но вот время заполнения м.б. кончено разным), и таким образом нет смысла куда либо их писать. Да и вообще дублировать БД, тоже не хотелось.
Есче раз спасибо за исчерпывающий ответ.
...
Рейтинг: 0 / 0
25 сообщений из 26, страница 1 из 2
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Медленная работа ListView
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]