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


Автор: NikolayKr 2.7.2007, 10:34
Как выделить ячейку в DBGrid . В смысле не цветом, а програмно так как в StringGrid:
StringGrid.Row:=3;
StringGrid.Col:=5;

Автор: Burka 2.7.2007, 18:37
Все легко) за 2 мин разобрался.

Что бы выделить столбец
Код

DbGrid1.SelectedIndex:= Number; //Не забудь что с нуля счет идет;


А для выбора строки тебе придеться делать что-то типо такого

Код

Table1.First;
Table1.MoveBy(Number)


или можно с текущей позиции на нужную, что-то типа такого
Код

Table1.MoveBy(Number - Table1.RecNo)

Автор: Romikgy 2.7.2007, 20:20
хммм....
а также не пройдет?
Цитата(NikolayKr @  2.7.2007,  09:34 Найти цитируемый пост)
StringGrid.Row:=3;
StringGrid.Col:=5;

только вместо StringGrid поставить DBGrid 

Автор: Burka 2.7.2007, 20:29
Romikgy -  smile 
Ты бы сначала посмотрел бы, есть ли такое свойство у DBGrid'a. 

Автор: Romikgy 2.7.2007, 21:06
Цитата(Burka @  2.7.2007,  19:29 Найти цитируемый пост)
Ты бы сначала посмотрел бы, есть ли такое свойство у DBGrid'a. 

такое свойство есть у TCustomGrid , а TDBGrid наследуется от него , имхо посмотри в хелп
(PS проверить негде, а то бы проверил выложил пример)

Автор: Burka 2.7.2007, 21:22
Наследуется, но свойство не используется так, как в StringGrid'e.

Автор: Romikgy 2.7.2007, 22:59
А если сделать что то вроде такого?
Код

TMyDBGrid = class(TDBGrid)
private
procedure SetRow(Value: Longint);
procedure SetCol(Value: Longint);
 published
property Row: Longint write SetRow;
property Col: Longint  write SetCol;
end;

procedure TMyDBGrid.SetCol(Value: Longint);
begin
  if Col <> Value then FocusCell(Value, Row, True);
end;
procedure TMyDBGrid.SetRow(Value: Longint);
begin
  if Row <> Value then FocusCell(Col, Value, True);
end;

Автор: _shef_ 2.7.2007, 23:54
Я пока не совсем понял зачем это надо, но мой вариант решения такой:

1. Строки - перемещаешься по базе данных методами TTable или что у тебя там. Ведь грид - это "фотография" участка базы и перемещаться по гриду смысла нет.

2. Столбцы - очень простой код

Код

DBGrid1.Fields[3 {номер твоего столбца с нуля} ].FocusControl;


Вроде все  smile 

Автор: Burka 3.7.2007, 00:02
Romikgy, а можно ли получить данные из строки, не переходя на нее в TTable?
То есть у нас в DBGride выделена, допустим 5 строка и 3 столбец и нужно получить данные из строки 4 и столбца 3, не снимая выделения.

Автор: NikolayKr 3.7.2007, 10:02
Спасибо, Burka , все получилось. 
Цитата(_shef_ @  2.7.2007,  23:54 Найти цитируемый пост)
Я пока не совсем понял зачем это надо, но мой вариант решения такой:

1. Строки - перемещаешься по базе данных методами TTable или что у тебя там. Ведь грид - это "фотография" участка базы и перемещаться по гриду смысла нет.

2. Столбцы - очень простой код


По строкам я и так перемещался с помощью Query, проблема была именно в столбцах.

Автор: _shef_ 3.7.2007, 14:48
Цитата(NikolayKr @  3.7.2007,  10:02 Найти цитируемый пост)
По строкам я и так перемещался с помощью Query, проблема была именно в столбцах


Кто нибудъ может обьяснить мне зачем это надо.
Если надо пробежать по нужным полям базы так это можно сделать и без грида.

Вопрос - зачем бегать по гриду? smile 

Автор: NikolayKr 3.7.2007, 15:34
Цитата(_shef_ @  3.7.2007,  14:48 Найти цитируемый пост)
Кто нибудъ может обьяснить мне зачем это надо.
Если надо пробежать по нужным полям базы так это можно сделать и без грида.

Вопрос - зачем бегать по гриду?



Была необходимость после вызова метода Refresh выделить ячейку в определенном столбце

Автор: Romikgy 3.7.2007, 22:56
Цитата(Burka @  2.7.2007,  23:02 Найти цитируемый пост)
а можно ли получить данные из строки, не переходя на нее в TTable?

я не силен в БД , но имхо хелп может ответить на большинство вопросов smile
все даные хранятся в TTable в DataSource, а из него можно вытянуть всю инфу без бегания по дбгриду, имхо

Автор: _shef_ 4.7.2007, 12:07
Я тут поглядел TTable, и вот что нарыл:
После рефреша мона юзать локейт, что бы стать на нужную строку, например
Код

Table1.Locate('Name'{поле},'Parrot'{значение},[loPartialKey]);

в хелпе неплохо написано как это сделать для нескольких полей что бы конкретизировать место перехода.
Ну а со столбцом вроде уже разобрались(см.Выше)

Автор: wectula 10.12.2022, 02:52
Модератор: Сообщение скрыто.

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