Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
0 / 0 / 0
Регистрация: 12.11.2016
Сообщений: 22
1

Фильтры в StringGrid

01.11.2017, 09:49. Показов 1539. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите, пожалуйста, с кодом на фильтрацию данных в разных столбцах в StringGrid. Например, есть 3 Edit'a и StringGrid с тремя столбцами (неограниченно строк), каждый Edit фильтрует данные в своём столбце (это получается сделать), главное без учёта регистра, соответственно, самое главное, отфильтровав один столбец, и вводя данные в другой, фильтрация происходила бы уже по предыдущей сортировке. По типу экселя, постепенно чтобы найти нужную строку) Помогите чайнику)) Пример на скрине.
Миниатюры
Фильтры в StringGrid  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.11.2017, 09:49
Ответы с готовыми решениями:

VBA Excel автофильтр: вместо "фильтры по дате" предлагается "текстовые фильтры"
Доброго времени суток, уважаемые форумчане! Пожалуйста, подскажите решение следующей дилеммы: С...

Delphi 7 Stringgrid Нужно сделать цикл для заполнения Stringgrid данными из другого Stringgrid
Нужно чтобы из Stringgrid1 данные переносились в Stringgrid2 Но ТОЛЬКО ПО УСЛОВИЮ Таблицы...

Как перенести строку из одного StringGrid в столбец другого StringGrid?
Всем добра уважаемые спецы в программировании! Не могу сообразить как сделать следующее в...

Необходимо сложить ячейки в столбце Stringgrid и вывести в другой Stringgrid
Необходимо сложить ячейки в столбце Stringgrid и вывести в другой Stringgrid Количество столбцов...

12
5395 / 4323 / 1060
Регистрация: 29.08.2013
Сообщений: 27,130
Записей в блоге: 3
01.11.2017, 17:09 2
Цитата Сообщение от TitanReks Посмотреть сообщение
Помогите чайнику))
фильтровать надо не грид, а массив\db где хранятся данные, а на грид выводить только результат
0
0 / 0 / 0
Регистрация: 12.11.2016
Сообщений: 22
02.11.2017, 08:53  [ТС] 3
Цитата Сообщение от qwertehok Посмотреть сообщение
фильтровать надо не грид, а массив\db где хранятся данные, а на грид выводить только результат
Данные не в массиве, а в файлах хранятся в данном случае.

Вот код на фильтрацию одного столбца, но этого мало для того что я описал выше.
Delphi
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
var
  L1 : TStringList;
  I, x, y: Integer;
  s : integer;
begin
 
sl1:=TStringList.Create;
 sl2:=TStringList.Create;
 
  L1 := TStringList.Create;
  L1.LoadFromFile('имя файла');
 StringGrid1.RowCount := L1.Count+1;
 StringGrid1.ColCount := 2;
  For I := 0 To L1.Count-1 Do
    Begin
       StringGrid1.Cells[0,i+1] := Copy(L1[i],1,Pos(',',L1[i])-1);
       StringGrid1.Cells[1,i+1] := Copy(L1[i],Pos(',',L1[i])+1,Length(L1[i]));
    End;
  L1.Free;
 
begin
with StringGrid1 do
for s:= 1 to RowCount-1 do
begin
Cells[0, s]:= IntToStr(s);
end;
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
var i, k : integer;
begin
sl1.clear;
 sl2.clear;
 
 for i := 0 to StringGrid1.RowCount - 1 do
  begin
   sl1.Add(StringGrid1.Rows[i].DelimitedText);
   if StringGrid1.Cells[2,i] = sEdit2.Text
    then sl2.Add(StringGrid1.Rows[i].DelimitedText);
  end;
  ClearGrid;
 k:=0;
 for i := 0 to sl2.Count - 1 do
  begin
   StringGrid1.Rows[k].DelimitedText := sl2.Strings[i];
   inc(k);
   StringGrid1.RowCount := k;
  end;
end;
0
5395 / 4323 / 1060
Регистрация: 29.08.2013
Сообщений: 27,130
Записей в блоге: 3
02.11.2017, 09:04 4
Цитата Сообщение от TitanReks Посмотреть сообщение
но этого мало для того что я описал выше.
что бы не писать кучу бесполезного кода грузи свои файлы в MemTable и фильтруй
быстро и просто

ЗЫ если давать понятные названия компонентам и переменным, то будет работать на 7% быстрее
0
0 / 0 / 0
Регистрация: 12.11.2016
Сообщений: 22
02.11.2017, 09:44  [ТС] 5
И тем не менее вопрос всё же ещё открыт по StringGrid
0
5786 / 4528 / 1431
Регистрация: 14.04.2014
Сообщений: 20,157
Записей в блоге: 20
02.11.2017, 10:19 6
в чем вопрос-то?
уже сказали все что нужно.
данные хранятся не на экране, а только отображаются на нём
так что как вы данные отсортируете, отфильтруете так и показывайте их в StringGrid
если вопрос - как отсортировать и отфильтровать, то это другая тема.
0
0 / 0 / 0
Регистрация: 12.11.2016
Сообщений: 22
02.11.2017, 11:52  [ТС] 7
В этом вопрос и есть, как отфильтровать (выше, в первом сообщении, полное описание)...
0
5395 / 4323 / 1060
Регистрация: 29.08.2013
Сообщений: 27,130
Записей в блоге: 3
02.11.2017, 12:23 8
Цитата Сообщение от TitanReks Посмотреть сообщение
как отфильтровать
если уж ты хочешь делать неправильно - делай
в чем вопрос грид перебрать?
0
Модератор
9261 / 6039 / 2379
Регистрация: 21.01.2014
Сообщений: 25,803
Записей в блоге: 3
02.11.2017, 12:39 9
Цитата Сообщение от TitanReks Посмотреть сообщение
каждый Edit фильтрует данные в своём столбце (это получается сделать)
да и не фильтр это у Вас, а (не знаю как и сказать)... Фильтр, в моем представлении, работает так (на примере):
1. Поле ввода пусто - в столбце 10 записей...
2. В поле ввода 1 буква - в столбце осталось 5 записей, начинающихся на эту букву
3. В поле ввода 2 буквы - в столбце осталось 2 записи, начинающихся на эти 2 буквы
4. В поле ввода удалили вторую букву. осталась одна первая - в столбце снова 5 записей, начинающихся на эту букву
5. Очистили поле ввода - в столбце снова 10 записей
А где у Вас откат к предыдущему состоянию?
Нет, без БД такое сделать - это или сторонние компоненты или куча геморойного кода...
0
0 / 0 / 0
Регистрация: 12.11.2016
Сообщений: 22
02.11.2017, 13:13  [ТС] 10
Цитата Сообщение от qwertehok Посмотреть сообщение
в чем вопрос грид перебрать?
Поэтому я и прошу помощи у знатоков)

Цитата Сообщение от D1973 Посмотреть сообщение
1. Поле ввода пусто - в столбце 10 записей...
2. В поле ввода 1 буква - в столбце осталось 5 записей, начинающихся на эту букву
3. В поле ввода 2 буквы - в столбце осталось 2 записи, начинающихся на эти 2 буквы
4. В поле ввода удалили вторую букву. осталась одна первая - в столбце снова 5 записей, начинающихся на эту букву
5. Очистили поле ввода - в столбце снова 10 записей
такой принцип мне и надо, однако не могу реализовать (всё что намудрил - выше)...при этом всём, чтобы помимо одного столбца как вы привели пример, вводя во второе поле ввода, мне таким же образом отбирало во втором столбце, но отбирало уже по имеющемуся предыдущему результату, так как строчки связаны (5-ая строка 1-го столбца привязана к 5-ой строке 4*-ого столбца), плюс без учёта регистра

Цитата Сообщение от D1973 Посмотреть сообщение
А где у Вас откат к предыдущему состоянию?
Не получилось, лишь обновлением грида к исходным данным

Цитата Сообщение от qwertehok Посмотреть сообщение
что бы не писать кучу бесполезного кода грузи свои файлы в MemTable и фильтруй
быстро и просто
Платный ведь компонент, или я ошибаюсь?

Цитата Сообщение от D1973 Посмотреть сообщение
Нет, без БД такое сделать - это или сторонние компоненты или куча геморойного кода...
Конкретно с тем же DBGrid не работал, так как все данные держал в файлах и визуально их потом отображал.
0
5395 / 4323 / 1060
Регистрация: 29.08.2013
Сообщений: 27,130
Записей в блоге: 3
02.11.2017, 13:24 11
Цитата Сообщение от TitanReks Посмотреть сообщение
Поэтому я и прошу помощи у знатоков)
в чем? написать for?

Цитата Сообщение от TitanReks Посмотреть сообщение
Платный ведь компонент, или я ошибаюсь?
ошибаешься
0
0 / 0 / 0
Регистрация: 12.11.2016
Сообщений: 22
02.11.2017, 13:29  [ТС] 12
в DBGrid подобного рода отбор намного проще осуществим, или нет?

Цитата Сообщение от TitanReks Посмотреть сообщение
Сообщение от D1973
1. Поле ввода пусто - в столбце 10 записей...
2. В поле ввода 1 буква - в столбце осталось 5 записей, начинающихся на эту букву
3. В поле ввода 2 буквы - в столбце осталось 2 записи, начинающихся на эти 2 буквы
4. В поле ввода удалили вторую букву. осталась одна первая - в столбце снова 5 записей, начинающихся на эту букву
5. Очистили поле ввода - в столбце снова 10 записей
такой принцип мне и надо, однако не могу реализовать (всё что намудрил - выше)...при этом всём, чтобы помимо одного столбца как вы привели пример, вводя во второе поле ввода, мне таким же образом отбирало во втором столбце, но отбирало уже по имеющемуся предыдущему результату, так как строчки связаны (5-ая строка 1-го столбца привязана к 5-ой строке 4*-ого столбца), плюс без учёта регистра
0
5395 / 4323 / 1060
Регистрация: 29.08.2013
Сообщений: 27,130
Записей в блоге: 3
02.11.2017, 13:40 13
DBGrid он не для фильтра, он для отображения
Если ты свои данные загрузишь в БД\MemTable (любой источник где есть SQL) то фильтр\поиск делать проще простого и быстрее быстрого
0
02.11.2017, 13:40
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.11.2017, 13:40
Помогаю со студенческими работами здесь

Вывести данные из StringGrid-ов на двух формах в StringGrid на третьей форме
Помогите,не разбираюсь,только учусь:(:wall:...Вообщем,имеется программа с 3 формами. На первой из...

Содержимое выделенной строки из первого StringGrid-а перенести во второй StringGrid
Нужно написать программу которая выполняет следующие действия. Есть два StringGrid. По нажатия на...

StringGrid: проверить, имеется ли строка с ключевым полем во втором StringGrid-е
Имеются два StringGrid'a, у каждого есть ключевое поле. В первом sg значения ключевого поля могут...

Значение одной ячейки первого StringGrid-а присвоить другой ячейке второго StringGrid-а
скажите пожалуйста, вот нам даны две таблицы stringgrid, как значение одной ячейки,первой таблицы,...

Сохранение из StringGrid массива в файл и загрузка из файла в StringGrid
Всем доброго времени суток =) У меня есть загрузка массива из StringGrid на Delphi 2010:...

Как соединить StringGrid с другим StringGrid (Rad xe8)
Здраствуйте. Проблема заключается в следующем: Есть таблица которая указана на 1 изображении ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru