Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Как высветить в Гриде определенные строки?


Автор: Jura07 11.6.2011, 18:37
Как высветить в Grid только те строки из Table, которые отвечают  условию совпадения с ComboBox.Text ????

Автор: Jura07 11.6.2011, 19:01
 
Код

If DBGrid3.Columns[4]=ComboBox5.Text then .... :wacko 


Автор: Vas 11.6.2011, 19:36
Отказаться от TTable и использовать TQuery - это в идеале. 
Для TTable есть свойства Filter и Filtered, дальше думаю, сам докопаешься.

Добавлено через 1 минуту и 36 секунд
Цитата(Jura07 @  11.6.2011,  19:01 Найти цитируемый пост)
If DBGrid3.Columns[4]=ComboBox5.Text then .... smile 

Так никогда не делай, грид не содержи записей, а только отображает их, так что все манипулации с данными делаются в датасете, а никак не в гриде.

Автор: Akella 11.6.2011, 22:45
Слово "высветить" непонятное. Но моя телепатия подсказывает мне, что ты хочешь выделить некоторые строки другим цветом, так?
Если так, то почитай про событие OnDrawCell. Погугли на тему цветной DBGrid. Примеров масса.

Автор: Jura07 12.6.2011, 16:10
Под словом высветить, я имел ввиду, чтобы только те записи были видны в Гриде, которые отвечают условию...
Но как я понял, надо не с Гридом плясать, а с Датасетом... 
К smile акую-нибудь  функцию не подскажите?

Добавлено через 10 минут и 41 секунду
Не, мне не надо изменять данные на этом этапе. Я просто хочу, чтобы в Гриде высвечивались не все строки, а только те, в одном столбце в которых значение совпадало с выбранным в Комбобоксе ...
Помогите народ ...

Автор: Novichek27 12.6.2011, 18:54
Попробуй так примерно, используя ADOQuery:

Код

...
case ComboBox1.ItemIndex of
0: ADOQuery1.SQL.Text := 'SELECT *FROM table WHERE field1='значение'';
1: ADOQuery1.SQL.Text := 'SELECT *FROM table WHERE field1='др.значение'';
2: ADOQuery1.SQL.Text := 'SELECT *FROM table WHERE field1='3-е значение'';
//и т.д..
end;
...


строки будут выбираться...

Добавлено @ 19:07
НЕТ, это не то. ВОТ так пробуй:

Код

var s : string;
begin
s := ComboBox1.Text;
with ADOQuery1 do
  begin
    Close;
    SQL.Clear;
    SQL.Add('SELECT *FROM table');
    SQL.Add('WHERE (field1 LIKE "%' + s + '%")');
    Open;
  end;
end;

Автор: 14SatanA88 13.6.2011, 08:41
Jura07, 

table.Filter:='ПОЛЕ = УСЛОВИЕ';

в делфи хелпе есть примеры

Автор: Jura07 13.6.2011, 10:28
Цитата

table.Filter:='ПОЛЕ = УСЛОВИЕ';

 
в моем случае это должно  выглядеть так???
Код

Form1.Spisok.Filter:='Специальность'=ComboBox2.text;

но все равно не работает

Автор: Jura07 13.6.2011, 10:46
у меня получается что-то вроде этого
Код

Form1.Spisok.Filter:=Spisok.FieldByName('Специальность').AsString = ComboBox2.text;


но выдает ошибку Incompatible types: 'String' and 'Boolean'

что я делаю не так?

Автор: Akella 13.6.2011, 12:59
тебе ж дали уже пример с SQL

Автор: Jura07 13.6.2011, 13:25
я с SQL не особо знаком... хотел обойтись 
ну раз пошла такая пьянка - какой элемент надо на форму добавить ?

Автор: Данкинг 13.6.2011, 13:57
Цитата(Jura07 @  13.6.2011,  14:25 Найти цитируемый пост)
какой элемент надо на форму добавить ? 

TADOQuery. smile 

Автор: Jura07 13.6.2011, 14:49
говорю же в SQL вообще не секу smile 
теперь пишет Missing connection or connection string ...
 smile 

Автор: Данкинг 13.6.2011, 15:03
Цитата(Jura07 @  13.6.2011,  15:49 Найти цитируемый пост)
теперь пишет Missing connection or connection string ...

И при чём здесь SQL? smile  У AdoQuery в свойстве .Connection выбери своё ADOConnection.

Автор: 14SatanA88 13.6.2011, 15:37
Код

Form1.Spisok.Filter:='Специальность = '+ComboBox2.text;


если не запашет, то
Код

Form1.Spisok.Filter:='Специальность = '+QuotedStr(ComboBox2.text);


в общем смотри сюда.
если у тебя условие известное заранее тебе, то вот пример:
Spisok.Filter:='Специальность = олкоголег'
если же ты берешь данные для фильтра извне (например свойство текцт компонента эдит), то:
Spisok.Filter:='Специальность = '+QuotedStr(Edit1.Text)

понял?

Автор: Jura07 13.6.2011, 15:44

Цитата

ADOConnection

значит его тоже скинуть на форму? 
говорю же к этим элементам вообще не обращался... и не понял еще как надо!

Автор: 14SatanA88 13.6.2011, 15:47
погоди, тебе не нужен никакой ADOConnection.

у тебя таблица данных связана как?
Table + DataSource?
или ADOTable?

Автор: Jura07 13.6.2011, 15:49
14SatanA88, вот этот код мне уже ближе, вот только говорит, что Field C не может быть найден...
название столбца не понимает, как можно подправить?

Добавлено через 49 секунд
DataSource - Table

Автор: 14SatanA88 13.6.2011, 15:54
тааак. уже яснее.

в общем виде код для фильтра такой

Код

table.filter:='Field = Param'; // здесь Field - это имя поля, Param - значение
table.filtered:=true; // свойство table, которое надо поставить в тру, чтобы в гриде отображались именно фильтрованные записи


Цитата(Jura07 @  13.6.2011,  15:49 Найти цитируемый пост)
говорит, что Field C не может быть найден...


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

Автор: Jura07 13.6.2011, 16:02
подозреваю, что русские буквы не нравятся
пишет Field 'C' not found
FieldName = Специальность !!! проверил

Автор: 14SatanA88 13.6.2011, 16:04
Цитата

подозреваю, что русские буквы не нравятся


ненене...

напиши код, как ты фильтруешь
именно строку, где фильтр:=

Автор: Jura07 13.6.2011, 16:05
Код

 Form1.Spisok.Filter:='Специальность= '+QuotedStr(ComboBox2.text);

Автор: 14SatanA88 13.6.2011, 16:25
избавься от кириллицы в названиях полей
все же не будет голова пухнуть лишний раз

Автор: Данкинг 13.6.2011, 17:24
Угу, так всё же к фильтрам вернулись. smile 

Автор: 14SatanA88 14.6.2011, 08:07
имхо удобней скула
но это мое мнение

Автор: Vas 14.6.2011, 08:16
Цитата(14SatanA88 @  14.6.2011,  08:07 Найти цитируемый пост)
имхо удобней скула

Вы просто не умеете его готовить  smile 

Автор: 14SatanA88 14.6.2011, 08:24
это тоже правда. очень редко пользуюсь скулом. поэтому и говорю что фильтрами удобней  smile 

Автор: Akella 14.6.2011, 09:50
Перетянуть на себя тыщ 150 записей и потом фильтровать  smile так держать

Автор: 14SatanA88 14.6.2011, 10:32
Akella, спокойно.
тут у топикстартера база данных мелкая совсем, так что использование фильтра потерь времени и ресурсов не принесет.

Автор: Akella 14.6.2011, 10:48
Потом привыкаешь и отвыкнуть в дальнейшем тяжело.

Автор: 14SatanA88 14.6.2011, 11:00
не буду с тобой спорить, Akella

Автор: Akella 14.6.2011, 12:01
В споре рождается истина smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)