Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Заполнение ListView

9.0K
20 июля 2006 года
j_anna
45 / / 10.07.2006
Хочу на ListView на форме вывести данные из запроса:
Код:
#include <vcl.h>
#include "dstring.h"
#include "comctrls.hpp"
#include "dateutils.hpp"
...
AnsiString Cmd_sql;
...
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TListColumn  *NewColumn;
TListItem  *ListItem;

Cmd_sql="SELECT  NamePole, NamePole2, NamePole3 FROM t"
...
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add(Cmd_sql);
ADOQuery1->Active=true;
NewColumn = ListView1->Columns->Add();
NewColumn->Caption = "NamePole";
NewColumn =ListView1->Columns->Add();
NewColumn->Caption = "NamePole2";
NewColumn =ListView1->Columns->Add();
NewColumn->Caption = "NamePole3";
ADOQuery1->Open();
ADOQuery1->First();
ListView1->Items->BeginUpdate();
while (!ADOQuery1->Eof) {
ListView1->AddItem(ADOQuery1->FieldByName("NamePole")->AsString,NULL);
ADOQuery1->Next();
}
ListView1->Items->EndUpdate();
}

в результате в ListView выводятся только названия столбцов, что не верно в цикле по записям в ADOQuery1?
7.8K
20 июля 2006 года
DrCoder
106 / / 27.01.2006
[QUOTE=j_anna]
в результате в ListView выводятся только названия столбцов, что не верно в цикле по записям в ADOQuery1?[/QUOTE]

первый параметр вызова AddItem - объект класса TListItem, так что его надо создавать перед добавлением, но можно также использовать метод Add, который это делает, и писать данные уже в созданный объект
кстати, чтобы писать в два других столбца следует использовать свойство SubItems у TListItem
9.0K
21 июля 2006 года
j_anna
45 / / 10.07.2006
TListItem *ListItem;
...
ADOQuery1->Open();
ADOQuery1->First();
ListView1->Items->BeginUpdate();
while (!ADOQuery1->Eof) {
ListItem = ListView1->Items->Add();
ListItem->SubItems->Add(ADOQuery1->FieldByName("NamePole")->AsString);
ListItem->AddItem(ADOQuery1->FieldByName("NamePole2")->AsString,NULL);
ListItem->AddItem(ADOQuery1->FieldByName("NamePole3")->AsString,NULL);
ADOQuery1->Next();
}
ListView1->Items->EndUpdate();

так тоже не заполняет
7.8K
21 июля 2006 года
DrCoder
106 / / 27.01.2006
[QUOTE=j_anna]TListItem *ListItem;
...
ADOQuery1->Open();
ADOQuery1->First();
ListView1->Items->BeginUpdate();
while (!ADOQuery1->Eof) {
ListItem = ListView1->Items->Add();
ListItem->SubItems->Add(ADOQuery1->FieldByName("NamePole")->AsString);
ADOQuery1->Next();
}
ListView1->Items->EndUpdate();

так тоже не заполняет[/QUOTE]

мадам, вы что-то путаете )))
надо вот так (честно говоря я делфист, могу немного с синтаксисом ошибиться):
 
Код:
...
ListItem = ListView1->Items->Add();
ListItem->Caption = ADOQuery1->FieldByName("NamePole")->AsString;
ListItem->SubItems->Add(ADOQuery1->FieldByName("NamePole2")->AsString);
ListItem->SubItems->Add(ADOQuery1->FieldByName("NamePole3")->AsString);
...
9.0K
21 июля 2006 года
j_anna
45 / / 10.07.2006
на синтаксис ошибок не выдаёт, но ListView по-прежнему не заполняет.
Может в свойствах ListView что не так? ViewStyle стоит vsReport
7.8K
21 июля 2006 года
DrCoder
106 / / 27.01.2006
[QUOTE=j_anna]на синтаксис ошибок не выдаёт, но ListView по-прежнему не заполняет.
Может в свойствах ListView что не так? ViewStyle стоит vsReport[/QUOTE]
так и должно быть
а вы уверены, что у вас запрос возвращает данные ?
9.0K
21 июля 2006 года
j_anna
45 / / 10.07.2006
да, у меня на форме пока размещён DBGrid и в нём результат запроса ADOOuery выводится
317
21 июля 2006 года
Relax
573 / / 20.09.2000
а в отладчике проверяла? попробуй... сразу понятно станерт где что не так, потмоу что внешне код рабочий.

еще можно проверить так: вместо
 
Код:
while (!ADOQuery1->Eof) {
ListView1->AddItem(ADOQuery1->FieldByName("NamePole")->AsString,NULL);
ADOQuery1->Next();
}

напиши что-нть типа:
 
Код:
ListView1->AddItem("12345",NULL);

и проверь - если запись появится в списке, значит что-то с самим циклов перебора, если нет - то что-то с самим списком... а вообще отладчик рулит :)
9.0K
21 июля 2006 года
j_anna
45 / / 10.07.2006
в отладчике происходит перебор.
чо-то с самим списком, потому что ListView1->AddItem("12345",NULL) тоже ничего не добавляет
317
21 июля 2006 года
Relax
573 / / 20.09.2000
мда... тогда помогут токо танцы с бубнами... поставь на форму рядом новый ЛистВью с настройками по умолчанию и экспериментируй на нем. если все получится - потом смотри чем отличаются они..
9.0K
21 июля 2006 года
j_anna
45 / / 10.07.2006
свойство OwnerData у ListView вернула в False и список заполняется
317
21 июля 2006 года
Relax
573 / / 20.09.2000
ага :) ну вот! список то заполнялся - просто не отрисовывался он, потому что была выключена отрисовка по умолчанию... а зачем выключила то?
9.0K
21 июля 2006 года
j_anna
45 / / 10.07.2006
так хотелось быстро по примеру из хелпа заполнить ListView, но где-то в синтаксисе ошиблась и начала в панике свойства ListView тыкать :) Потом, когда код поправила и не заполняется - пришлось всё равно про все свойства ListView читать :)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог