0 / 0 / 0
Регистрация: 05.05.2011
Сообщений: 16

Поисковик в Grid

04.04.2012, 21:01. Показов 2076. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
загвоздочка получилась. БД подключена с помощью компонентов ADOTable, DataSourch, ADOConnection(DataModule6). как можно организовать поисковик в Grid(Form2) или хотя бы чтоб отсеивалось не нужное при вводе в Edit? Код или хотя бы ссылки киньте на что то похожее. К завтрашнему дню надо.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.04.2012, 21:01
Ответы с готовыми решениями:

Возможно ли задать в XAML число строк и столбцов Grid сразу, без исп <Grid.ColumnDefinitions> и <Grid.RowDefinnitions>?
Возможно ли задать в XAML число строк и столбцов Grid сразу, без исп &lt;Grid.ColumnDefinitions&gt; и &lt;Grid.RowDefinnitions&gt;?

Поисковик Google перенаправляется на поисковик Mail.ru
Приветствую! Видел здесь много подобных тем с просьбой не применять написанное для других - для себя, поэтому пишу сам. Неделю назад...

А кроме Data Grid есть еще какой-нибудь Grid?
Вопрос конечно тупой, но что-то смотрю и не вижу. Или может не туда смотрю. Одним словом торможу. Опять же раньше был в VB такой...

4
1 / 1 / 0
Регистрация: 04.04.2012
Сообщений: 20
05.04.2012, 00:01
Для начала подготовим модуль данных. В нем нам потребуется создать глобальную переменную ed, чтобы мы могли передавать в нее текст из компонента Edit1:
Delphi
1
2
3
var
  fDM: TfDM;
  ed: String; //текст из Edit1
Этого действия можно было бы избежать, если бы компонент ADOTable, подключенный к таблице LichData, располагался на главной форме. Но поскольку он находится в модуле данных, то и событие onFilterRecord будет сгенерировано в нем. А в этом событии нам нужно будет знать, что в данный момент находится в поле ввода Edit1. Именно для этого и нужна глобальная переменная ed.
Далее выделяем TLichData, то есть, компонент ADOTable, подключенный к таблице LichData. На вкладке Events (События) инспектора объектов найдите событие onFilterRecord и дважды щелкните по нему, сгенерировав процедуру. Полный листинг процедуры:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
{onFilterRecord главной таблицы}
procedure TfDM.TLichDataFilterRecord(DataSet: TDataSet;
  var Accept: Boolean);
var
  s : String; //для значения поля
begin
  //получаем столько начальных букв из поля Фамилия,
  //сколько букв имеется в переменной ed:
  s := Copy(DataSet['Фамилия'], 1, Length(ed));
  //делаем проверку на совпадение значений:
  Accept := s = ed;
end;
Здесь в переменную s попадает столько начальных букв из поля "Фамилия", сколько букв содержит в данный момент компонент Edit1 на главной форме (эти буквы мы передадим в переменную ed чуть позже). Если текст в переменной sсовпадает с текстом из поля Edit1, то переменной Accept присваивается True, и запись принимается. Иначе запись отфильтровывается. Не забудьте сохранить проект.
Далее перейдем в главную форму. Нужно удалить весь текст из события onChange компонента Edit1, и вписать новый:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
{Изменение поиска по фамилии}
procedure TfMain.Edit1Change(Sender: TObject);
begin
  //если в поле Edit1 есть хоть одна буква,
  if Edit1.Text <> '' then begin
    fDM.TLichData.Filtered := False; //отключаем фильтр
    ed := Edit1.Text; //передаем в fDM новый текст
    fDM.TLichData.Filtered := True; //включаем фильтр
  end
  //если букв нет, фильтрацию отключаем:
  else fDM.TLichData.Filtered := False;
end;
Вот и все. Что же тут у нас происходит? Как только пользователь введет хоть одну букву, срабатывает событие onChangeкомпонента Edit1. Если в Edit1 есть хоть одна буква, то мы вначале отключаем фильтрацию, отменяя прошлый фильтр, если он был. Затем мы передаем в глобальную переменную ed, расположенную в модуле данных, текст из Edit1. Далее снова включаем фильтр. При этом срабатывает событие onFilterRecord нашей таблицы, и в этом событии сравнивается текущее значение переменной ed и записей поля "Фамилия".
0
0 / 0 / 0
Регистрация: 05.05.2011
Сообщений: 16
05.04.2012, 05:49  [ТС]
спасибо)
0
 Аватар для rdama
569 / 292 / 12
Регистрация: 28.01.2011
Сообщений: 1,326
05.04.2012, 13:56
Вот это жесть.
А свойство Filter у компонентов TDataSet к коим относится ADOTable вам чем не угодило?
0
15 / 15 / 2
Регистрация: 04.04.2012
Сообщений: 53
05.04.2012, 19:54
1 способ поиска-подцепляешь на форму кнопку и edit, в который вписываешь занчение для поиска
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
procedure TForm1.Button1Click(Sender: TObject);
// НАЧАЛО ПОИСКА
var
Familya:string; 
b1:boolean;
begin
b1:=true;
     Familya:=Edit1.Text;
      if (Edit1.Text<>'') then
      begin
      b1:=adoTable.Locate('UserName;Otdel',
      VarArrayOf([Familya,Otdel]),
      [loCaseInsensitive,loPartialKey]);
      end;
      if b1=false then
      MessageDlg('По запросу ничего не найдено.'+#13, mtInformation,[mbOK],0)
end;
2 способ поиска-подцепляешь adoquery к tadoconnection
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
procedure TForm1.Button1Click(Sender: TObject);
var
i1,k:integer;
begin
    adoQuery.SQL.Clear;
    adoQuery.SQL.Add('SELECT * FROM ТАБЛИЦА WHERE ПОЛЕ_ПО_КОТОРОМУ_ИЩЕШЬ LIKE "%'+Edit1.Text+'%"');     //поиск по любому совпадению, если на до по начальным буквам-после Like пишешь "%'+Edit1.Text+', если по конечным-+Edit1.Text+'%"', если по полному полю-+Edit1.Text+'
    adoQuery.Open;
    adoQuery.First;
    for k:=1 to adoQuery.RecordCount do
     begin
      i1:=adoQuery.Fields.Fields[0].Value;    //0-означает 1 поле по которому поиск происходит, т.е. 1 поле в твоей таблице. в данному случае оно ключевое
      b1:=adoTable.Locate('КЛЮЧЕВОЕ_ПОЛЕ',i1,
      [loCaseInsensitive,loPartialKey]);
     end;
    end;
ФИЛЬТРАЦИЯ
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
procedure TForm1.Button1Click(Sender: TObject);
var
 
S1: string; // выражение фильтрации
      begin
       S1:=''; // выражение фильтрации
      if (Edit1.Text<>'') then
      S1:=S1+'ИМЯ_ПОЛЯ LIKE ' + #39 + '%' + Edit1.Text + '%' + #39;
      adoTable.Filter:=S1;
      adoTable.Filtered:=true; // запуск фильтрации
      if adoTable.RecordCount=0 then
      MessageDlg('Ничего не найдено'+#13, mtInformation,[mbOK],0)
    end;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.04.2012, 19:54
Помогаю со студенческими работами здесь

Не могу прикрутить bindingnavigator к grid, которая связана с другой grid
вот код, если бы grid не были связаны то и проблем бы не было. а тут никак не получается. нужно чтобы binding навигатор относился к...

Неправильная ширина в Css Grid (grid-template-columns)
По высоте все нормально, но ширину никак не додумаюсь как выставить как на макете в итоге получил в макете должно быть так ...

В стиле для элемента Grid использовать другой Grid
Пытаюсь создать вот такой стиль для Grid &lt;Style x:Key=&quot;CrosswalkHorizontal&quot; TargetType=&quot;Grid&quot;&gt; &lt;Setter...

Как изменить Grid.Row и Grid.Column в элементе
как переместить кнопку из одной ячейки в другую при нажатии на нее или как поменять содержимое ячеек местами также при нажатии на кнопку ...

CSS grid (display: grid) как расположить блоки?
Пожалуйста подскажите как мне с помощью display grid рассположить блоки как на скриншоте


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

Новые блоги и статьи
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определенном условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru