Форум: "Основная";
Текущий архив: 2008.11.23;
Скачать: [xml.tar.bz2];
ВнизПРоблема с ТListView Найти похожие ветки
← →
Виталий (2008-02-06 14:45) [0]Добрый день
Проблема следующая. Надо В ТListView вставлять итемы в алфавитном порядке. Использую следующий код
for i:=0 to count-1 do
begin
//Поиск места вставки
Organizer_MainForm.OMS.Local_Storage_Plugin.GetCategorieName(CategoryID[i],name) ;
if ListView1.Items.Count<>0 then begin
j:=1;
while (j<=ListView1.Items.Count)and(name>listView1.Items.Item[j-1].Caption) do
inc(j);
NewItem:=ListView1.Items.Insert(j-1);
end
else NewItem:=Listview1.Items.add;
NewItem.ImageIndex:=0;
NewItem.Caption:=name;
end;
Места для вставки определяються верно но теме не менне итем вставленный Add( то есть самый первый) всегда оказываеться самым последним) А если ListView пустой то Insert не работает. Если заранее вставить пустой Item то все нормально сортируеться. Использую библиотеку CLX.
← →
DimaBr © (2008-02-06 15:28) [1]Внимание! Здесь обсуждаются вопросы, связанные с разработкой компонентов, редакторов свойств, редакторов компонентов и экспертов IDE.
Вопросы по поиску и использованию готовых компонентов, редакторов или экспертов являются нарушением тематики и могут быть удалены.
← →
Сергей М. © (2008-02-06 15:37) [2]
> итем вставленный Add( то есть самый первый) всегда оказываеться
> самым последним
На то и Add, чтобы дополнить список добавлением элемента в конец этого сптиска.
> если ListView пустой то Insert не работает
Нафига же вставлять что-то туда куда оно по элементарной логике вставлено быть не может ?
Если список пуст, то очевижнго же, что решением является Add()
← →
Сергей М. © (2008-02-06 15:39) [3]
> если ListView пустой то Insert не работает
Он, Insert, у тебя и не вызывается, если список пустой.
Как он при этом может "не работать" - совершенно не понятно)
← →
clickmaker © (2008-02-06 15:41) [4]function TListItems.Add: TListItem;
begin
Result := AddItem(nil, -1);
end;
function TListItems.Insert(Index: Integer): TListItem;
begin
Result := AddItem(nil, Index);
end;
← →
Сергей М. © (2008-02-06 15:42) [5]И гораздо проще и очевидней другое решение : не искать никакие "места вставки", а заполнить список в любом порядке и после этого одним махом отсортировать этот список.
← →
Виталий (2008-02-06 16:25) [6]Сергей М. © (06.02.08 15:39) [3]
>Он, Insert, у тебя и не вызывается, если список пустой.
>Как он при этом может "не работать" - совершенно не понятно)
потому и не вызываеться что не работает. надо организовать работу с базой данных так как в моем компьютере. Т.е. Есть база данных в которой таблица папок и таблица модулей в этих папках. папки могут быть вложены друг в друга.И при двойном щелчке по итему, если это папка получаем сначала список папки содержащихся в выбранной папке сортируем его, потом получаем список модулей сортируем его. вариант получать уже сортированный список из базы данных не подходит потому что название папки может быть в кавычках. которые надо отображать но при сортировке не учитывать. А проблема в том что первый элемент вставляеться Add. Потом к примеру получаем что следущий итем должен быть вставлен после этого, на позицию 1. но когда вставляем инсертом он всеравно вставляеться перед первым. И получаеться что все папки отсортированные а та пака которая была вставлена Add. Оказываеться последней.
← →
Сергей М. © (2008-02-06 16:31) [7]
> потому и не вызываеться что не работает
Бред какой-то ...
Какое отношение иетоды объекта TListView.Items имеют к какой-от там твоей супер-пупер-базеданных ?
Никакого абсолютно.
← →
Виталий (2008-02-06 16:35) [8]пробовал NewItem:=Listview1.Items.additem(nil, -1);
показывает ошибку List index out of bounds(0); на Insert(-1) тоже самое.
← →
Виталий (2008-02-06 16:43) [9]>Какое отношение иетоды объекта TListView.Items имеют к какой-от там >твоей супер-пупер-базеданных ?
База данных вовсе не супер пупер, и проблема не в ней. а именно спрашиваю как вставить то что из нее получаеться в алфавитном порядке TListView. Может я чего то не понимаю. Но первый Item у меня получилось вставить только Add. А все последущие вставляються Insert(j-1). И например первая пака была "Иностранный язык", она вставляеться Add. Следущая папка "Математика". получаем j=2. То есть вставлять надо после, иностранного языка. а всеравно папка математика оказываеться на первом месте.
← →
Сергей М. © (2008-02-06 16:52) [10]
> База данных вовсе не супер пупер, и проблема не в ней
А зачем тогда упомянул ?
> как вставить то что из нее получаеться в алфавитном порядке
Не надо ничего "вставлять в алфавитном порядке".
Вставляй в порядке выборки.
После того как добавишь/вставишь все элементы своей древовидной структуры, запусти сортировку. На то есть спецметоду у объектов, имеющих отношение к классу TTreeView
← →
Виталий (2008-02-06 16:57) [11]А как потом модули отсортировать. Надо же чтобы сначала папки отображались потом только модули.
← →
Сергей М. © (2008-02-06 16:59) [12]
> как потом модули отсортировать
Какие еще "модули" ?
Оперируй терминами "узел TTreeView". Там нет никаких "модулей".
← →
icWasya © (2008-02-06 17:00) [13]Insert (Index) всавляет элемент ПЕРЕД Index, а не после.
j:=0;
while (j<ListView1.Items.Count)and(name>listView1.Items.Item[j].Caption) do inc(j);
if j <ListView1.Items.Count then
NewItem:=ListView1.Items.Insert(j)
else
NewItem:=Listview1.Items.add;
← →
Сергей М. © (2008-02-06 17:06) [14]Пардон, речь идет, конечно же, о TListView.
Почему-то меня заклинило на TTreeView)
У объекта класса TListView есть замечательный метод CustomSort - он отсортирует тебе элементы списка так как тебе заблагорассудится и вне зависимости от изначального порядка добавления элементов в список.
← →
Сергей М. © (2008-02-06 17:14) [15]В простейшем же случае (а у тебя он простейший) достаточно после заполнения списка вызвать метод AlphaSort.
← →
Виталий (2008-02-06 17:17) [16]а есть у Item свойство где можно хранить ID папки? Id- значение
LongInt
← →
Сергей М. © (2008-02-06 17:27) [17]Есть.
Data оно зовется.
← →
MsGuns © (2008-02-06 22:40) [18]Для хранения данных о базеданных (хе-хе-хе) использовать TList, для сортировки которого написать соотв. код.
Листвью только для отображения
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2008.11.23;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.005 c