Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как спрятать запись в гриде,не пряча ее в DataSete 
:(
    Опции темы
Delphist
  Дата 17.9.2008, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphist Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2145
Регистрация: 3.2.2004
Где: всегда в сети

Репутация: 1
Всего: 3



Есть DBGridEh, который через DataSource подключается к FIBDataSet. Встала следующая задача, как сделать так, чтобы запись с определенным ID не отображалась в гриде, при это не удаляя ее из DataSeta.
Хотел было применить фильтр
Код

procedure
  TfmAbst.FIBDataSetFilterRecord(DataSet: TDataSet; var Accept: Boolean);
begin
 
  if DataSet.FieldByName('ROW_ID').AsInteger = signID then
     Accept := False;
end;

после чего в гриде эта запись пропала,  но она же пропала и из этого DataSet'a, т.е. 
Код

if FIBDataSet.Locate('ROW_ID', signID, []) then

возвращал False, а нужно чтобы запись исчезала только из грида. Как это сделать?

Это сообщение отредактировал(а) Delphist - 17.9.2008, 12:21


--------------------
ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др).
Когда-то давным-давно использовал это...
PM MAIL ICQ   Вверх
Frees
Дата 17.9.2008, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

Репутация: 23
Всего: 54



FIBDataSet.Filter := 'ROW_ID<>'+IntToStr(signID);
FIBDataSet.Filtered := true;

записей видно не будет но локейт будет работать


--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
Delphist
Дата 17.9.2008, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphist Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2145
Регистрация: 3.2.2004
Где: всегда в сети

Репутация: 1
Всего: 3



Цитата(Frees @  17.9.2008,  13:38 Найти цитируемый пост)
FIBDataSet.Filter := 'ROW_ID<>'+IntToStr(signID);
FIBDataSet.Filtered := true;

Попробовал, один фиг отображается

Это сообщение отредактировал(а) Delphist - 17.9.2008, 13:52


--------------------
ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др).
Когда-то давным-давно использовал это...
PM MAIL ICQ   Вверх
Deniz
Дата 18.9.2008, 06:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

Репутация: 8
Всего: 44



Delphist, поскольку Grid показывает все записи, которые есть в DataSet'е, то фильтры DataSet'а врядли подойдут.
Есть несколько вариантов:
1. Модифицировать DataSet.
2. Модифицировать Grid, сделать что-то вроде фильтров, т.е. например при прорисовке строки.
3. Добавить еще один DataSet и туда перекачивать данные для отображения.
4. Делать Locate не по текущему DataSet'у а через select.
При большом кол-ве записей 3 вариант может сильно притормозить работу.
При варианте 4 учесть работу с транзакциями, т.е. DataSet и select должны работать в транзакции SnapShot.


--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
pseud
Дата 18.9.2008, 09:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Экспёрт Тыдыщ
***


Профиль
Группа: Завсегдатай
Сообщений: 1175
Регистрация: 18.5.2007
Где: Минск, Беларусь

Репутация: 16
Всего: 40



Delphist, 
на форме:
Код

Query1 - DataSource1 - DBGrid1 - DataSetProvider1 - ClientDataSet1 - DataSource2 - DBGrid2

все делаю в дизайн-моде
Код

1. Query1 <- DataSource1 <- DBGrid1  // вижу 3 записи
2. DataSetProvider1.DataSet = Query1
3. ClientDataSet1.ProviderName = DataSetProvider1
4. ClientDataSet1.Filter = 'фильтр отрезающий часть данных'; 
    ClientDataSet1.Filtered = True
5. ClientDataSet1 <- DataSource2 <- DBGrid2  // вижу 1 запись


метод хорош тем, что не производится еще одного запроса в БД (я_так_думаю)


--------------------
Испытание чужого терпения можно считать успешным, если оно лопнуло...
PM MAIL   Вверх
pseud
Дата 18.9.2008, 10:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Экспёрт Тыдыщ
***


Профиль
Группа: Завсегдатай
Сообщений: 1175
Регистрация: 18.5.2007
Где: Минск, Беларусь

Репутация: 16
Всего: 40



спорная конструкция. сам таким никогда не пользовался. сочинил на ходу.


--------------------
Испытание чужого терпения можно считать успешным, если оно лопнуло...
PM MAIL   Вверх
Delphist
Дата 19.9.2008, 09:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphist Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2145
Регистрация: 3.2.2004
Где: всегда в сети

Репутация: 1
Всего: 3



Цитата(pseud @  18.9.2008,  11:05 Найти цитируемый пост)
спорная конструкция. сам таким никогда не пользовался. сочинил на ходу. 

У меня такой вопрос, например, в Query1.UpdateSQL у меня будет стоять запрос на обновление БД, тогда если бы к DBGrid2 подключался бы Query1 т.е. Query1 <- DataSource1 <- DBGrid2, то при модифакации какой-либо ячейки в гриде срабатывал бы автоматом Query1.UpdateSQL, возникает вопрос будет ли срабатывать Query1.UpdateSQL (а также Query1.InsertSQL, Query1.DeleteSQL при вставке и удалении), если  к DBGrid2  Query1 подключен через провайдера (через твой механизм)

Это сообщение отредактировал(а) Delphist - 19.9.2008, 09:23


--------------------
ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др).
Когда-то давным-давно использовал это...
PM MAIL ICQ   Вверх
pseud
Дата 19.9.2008, 09:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Экспёрт Тыдыщ
***


Профиль
Группа: Завсегдатай
Сообщений: 1175
Регистрация: 18.5.2007
Где: Минск, Беларусь

Репутация: 16
Всего: 40



Цитата(Delphist @  19.9.2008,  09:22 Найти цитируемый пост)
У меня такой вопрос, например, 


Надо сооружать example. Слету сказать сложно.



--------------------
Испытание чужого терпения можно считать успешным, если оно лопнуло...
PM MAIL   Вверх
Delphist
Дата 19.9.2008, 10:44 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphist Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2145
Регистрация: 3.2.2004
Где: всегда в сети

Репутация: 1
Всего: 3



Цитата(pseud @  19.9.2008,  10:55 Найти цитируемый пост)
Надо сооружать example. Слету сказать сложно.

Если кто проверить, сообщите о результатах


--------------------
ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др).
Когда-то давным-давно использовал это...
PM MAIL ICQ   Вверх
pseud
Дата 19.9.2008, 10:54 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Экспёрт Тыдыщ
***


Профиль
Группа: Завсегдатай
Сообщений: 1175
Регистрация: 18.5.2007
Где: Минск, Беларусь

Репутация: 16
Всего: 40



Цитата(Delphist @  19.9.2008,  10:44 Найти цитируемый пост)
Если кто проверить, сообщите о результатах


по-моему, в этом деле самый заинтересованный человек - ты 


--------------------
Испытание чужого терпения можно считать успешным, если оно лопнуло...
PM MAIL   Вверх
Delphist
Дата 19.9.2008, 11:17 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphist Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2145
Регистрация: 3.2.2004
Где: всегда в сети

Репутация: 1
Всего: 3



Цитата(pseud @  19.9.2008,  11:54 Найти цитируемый пост)
по-моему, в этом деле самый заинтересованный человек - ты  

Просто ща нет возможности проверить


--------------------
ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др).
Когда-то давным-давно использовал это...
PM MAIL ICQ   Вверх
Akella
Дата 20.9.2008, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Ну как появится, то проверь. smile

Добавлено через 1 минуту и 21 секунду
Delphist, событие FilterRecord срабатывает только когда ставишь dataset.filtered в True

Добавлено через 3 минуты
Цитата(Delphist @  17.9.2008,  12:20 Найти цитируемый пост)
procedure
  TfmAbst.FIBDataSetFilterRecord(DataSet: TDataSet; var Accept: Boolean);
begin
 
  if DataSet.FieldByName('ROW_ID').AsInteger = signID then
     Accept := False;
end;

это ты в дизайне прописал, так? А теперь, чтобы этот код сработал просто вызывай код
Код

FIBDataSet.Filtered := True;

PM MAIL   Вверх
Delphist
Дата 22.9.2008, 09:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphist Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2145
Регистрация: 3.2.2004
Где: всегда в сети

Репутация: 1
Всего: 3



Цитата(Akella @  20.9.2008,  16:59 Найти цитируемый пост)
это ты в дизайне прописал, так? А теперь, чтобы этот код сработал просто вызывай код

С чего начинал к тому и пришли. 
Повтору еще раз, если я применяю фильтр (Filtered = True)
Код

procedure
  TfmAbst.FIBDataSetFilterRecord(DataSet: TDataSet; var Accept: Boolean);
begin
 
  if DataSet.FieldByName('ROW_ID').AsInteger = signID then
     Accept := False;
end;

то в результате из грида эта запись пропадает,  но она же пропадает и из этого DataSet'a, т.е. 
Код

if FIBDataSet.Locate('ROW_ID', signID, []) then

возвращает False, а нужно чтобы запись исчезала только из грида. Как это сделать?


--------------------
ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др).
Когда-то давным-давно использовал это...
PM MAIL ICQ   Вверх
Delphist
Дата 22.9.2008, 10:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphist Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2145
Регистрация: 3.2.2004
Где: всегда в сети

Репутация: 1
Всего: 3



Цитата(pseud @  18.9.2008,  11:05 Найти цитируемый пост)
спорная конструкция. сам таким никогда не пользовался. сочинил на ходу. 

Если делать все как ты написал, то вообще ни одна запись не выводиться


--------------------
ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др).
Когда-то давным-давно использовал это...
PM MAIL ICQ   Вверх
Akella
Дата 22.9.2008, 22:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



хорошо, а зачем делать так?

Цитата(Delphist @  22.9.2008,  09:46 Найти цитируемый пост)
исчезала только из грида


может можно использовать 2 датасета?  smile

Добавлено через 1 минуту и 12 секунд
Можно использовать альтернативный датасет, например cxGrid, у которого есть своя фильтрация
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.1300 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.