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


Автор: alf138 14.3.2010, 22:16
Вопрос вот в чем состоит есть DBGrid, в нем определенные данные, нужно при помощи поиска или ComboBox выделять нужную мне строчку и перематывать. Все понимаю что есть TField.FocusControl, но он не перематывает у меня просто выделяет нужную строчку, поскажите куда копать и что рыть, вот что писал
Код

DBGrid1.Columns[10].Field.FocusControl;

Автор: Данкинг 14.3.2010, 23:49
"Перематывается" при переходе по датасету, к которому привязан грид.

Автор: former 15.3.2010, 00:45
А почему не использовать Locate? Если я правильно понял вопрос.

Автор: alf138 15.3.2010, 06:02
Грид привязан к дата сурсу же... Получится должно некое подобие эксель, ввел нужное значение грид сам перемотал до него и по возможности выделил.

Автор: Deniz 15.3.2010, 06:47
alf138, смотри 
Цитата(former @  15.3.2010,  02:45 Найти цитируемый пост)
А почему не использовать Locate? Если я правильно понял вопрос.

Автор: Данкинг 15.3.2010, 11:43
Цитата(alf138 @  15.3.2010,  06:02 Найти цитируемый пост)
ввел нужное значение грид сам перемотал до него и по возможности выделил.

Что именно не получается? Тебе же пишут: используй Locate для поиска.

Автор: alf138 15.3.2010, 14:12
Спасибо большое, получилось.
Код

Form1.DBGrid1.DataSource.DataSet.Locate('FAM',Edit5.Text,[loPartialKey]);

А как сделать чтобы найденная строчка выделялась ?

Автор: Deniz 15.3.2010, 15:47
Цитата(alf138 @  15.3.2010,  16:12 Найти цитируемый пост)
А как сделать чтобы найденная строчка выделялась?
???
Что значит выделялась?
Если найдено, то указатель перемещается на эту строчку и Locate возвращает TRUE.
Если не найдено, то ничего не происходит и Locate возвращает FALSE.

Автор: alf138 15.3.2010, 20:46
Вот есть такой код
Код

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if (Table1.FieldByName('T_RAB').Value=1) then begin
with  DBGrid1.Canvas do begin
Brush.Color:=clGreen;
Font.Color:=clWhite;
FillRect(Rect);
TextOut(Rect.Left+2,Rect.Top+2,Column.Field.Text);
end;
end;
end;

Она выделяет значени 1 в столбике T_RAB , но как сделать чтобы он выделял найденные строки ?

Автор: Deniz 16.3.2010, 09:51
Цитата(alf138 @  15.3.2010,  22:46 Найти цитируемый пост)
как сделать чтобы он выделял найденные строки?
Т.е. их несколько?
Код
s:=Trim(Table1.FieldByName('FAM').Value);
if (pos(Edit1.Text, s) > 1) then ... // выделить

Что-то не туда мы идем.

Автор: alf138 16.3.2010, 14:26
Строчка одна, почему не туда ? Он действительно находит нужную строчку, но не выделяет ее почти не как, хотелось бы визуально показывать найденную строчку. Или это не возможно ?

Автор: Deniz 16.3.2010, 16:18
Цитата(alf138 @  16.3.2010,  16:26 Найти цитируемый пост)
Или это не возможно ?
Возможно.
Из хелпа:
Цитата
DBGrid.Options
...
dgIndicator    A small pointer appears in the first column to indicate which row is current.
dgRowSelect    The user can select an entire row, as well as selecting individual cells. If Options includes dgRowSelect, dgEditing and dgAlwaysShowEditor are ignored.
...

Автор: alf138 17.3.2010, 20:56
Все это у меня включенно, но при переходе на найденную строчку он ее все равно не выделяет, просто перематывает да найденного значения, и не выделяет его.

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