Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.12.2007, 20:12   #1
Cyn4uk
Пользователь
 
Регистрация: 25.11.2007
Сообщений: 56
По умолчанию Вопрос по DBGrid

имеем: rowselect=true

необходимо определить какую именно строку мы выделили, т.е. определить какой номер записи (не или любые другие данные по этой записи) имеет выделенная строка в базе.

Это связано с тем, что в грид мы выводим не все данные, а только часть с помощью SQL запроса.

Определение этих данных необходимо сделать при вызове popupmenu нажатием правой клавиши мыши на необходимой нам строчке.

Заранее спасибо за помощь! =)
Cyn4uk вне форума Ответить с цитированием
Старый 03.12.2007, 20:18   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
необходимо определить какую именно строку мы выделили, т.е. определить какой номер записи (не или любые другие данные по этой записи) имеет выделенная строка в базе.
Номер вы сможете определить в том случае, если вы предусмотрели поле уникального идентификатора записи (это и будет условным номером).
Этот же самый идентификатор вы можете вывести в связанный с датасетом дбтекст, или дбэдит, или вообще куда угодно... независимо от того, полная у вас выборка или частичная.
mihali4 вне форума Ответить с цитированием
Старый 03.12.2007, 20:33   #3
Cyn4uk
Пользователь
 
Регистрация: 25.11.2007
Сообщений: 56
По умолчанию

Цитата:
Сообщение от mihali4 Посмотреть сообщение
Номер вы сможете определить в том случае, если вы предусмотрели поле уникального идентификатора записи (это и будет условным номером).
Этот же самый идентификатор вы можете вывести в связанный с датасетом дбтекст, или дбэдит, или вообще куда угодно... независимо от того, полная у вас выборка или частичная.
Приведите пожалуйста простой пример. Допустим, по нажатию на строку в ДБГриде вывести в лабеле номер табличной записи.
Я просто не понимаю как это программно сделать.
Cyn4uk вне форума Ответить с цитированием
Старый 03.12.2007, 22:29   #4
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
Я просто не понимаю как это программно сделать
Очень просто:
Код:
procedure TForm1.DBGrid1CellClick(Column: TColumn);
begin
Label1.Caption:=DBGrid1.SelectedField.AsString;
end;
выводит содержимое поля, куда вы ткнули мышкой.
Для вашего случая будет
Код:
procedure TForm1.DBGrid1CellClick(Column: TColumn);
begin
Label1.Caption:=IntToStr(DBGrid1.DataSource.DataSet.FieldValues['Id']);
end;
где ID - поле уникального идентификатора.

Подозреваю, что вам нужно как-то пометить выделенную запись, чтобы при необходимости к ней обратиться.
Для этого случая существуют методы GetBookmark, GotoBookmark, FreeBookmark.
Bookmark - это временная пометка текущей записи. Эту пометку вы при необходимости можете поставить, чтобы использовать для обращения к помеченной записи. После использования ее нужно освободить.

Последний раз редактировалось mihali4; 04.12.2007 в 01:42.
mihali4 вне форума Ответить с цитированием
Старый 03.12.2007, 22:57   #5
Cyn4uk
Пользователь
 
Регистрация: 25.11.2007
Сообщений: 56
По умолчанию

Все, теперь понял, спасибо огромное!
Cyn4uk вне форума Ответить с цитированием
Старый 16.12.2007, 09:27   #6
Cyn4uk
Пользователь
 
Регистрация: 25.11.2007
Сообщений: 56
По умолчанию

Теперь такой вопрос: если у нас multiselect включен и выделено несколько строк в гриде, то как нам определить при этом условии id всех выделенных строк?

Работа с закладками в данном случае не очень удобна, т.к. у нас может быть одновременно выделено большое количество строк.

Можно, разумеется, записывать индексы куда-то по одному по мере выделения, а затем их обрабатывать. Но, возможно, существует какой-то более простой (быстрый) способ.

Последний раз редактировалось Cyn4uk; 16.12.2007 в 10:32.
Cyn4uk вне форума Ответить с цитированием
Старый 16.12.2007, 13:55   #7
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Смотрите в хэлпе SelectedRows property.
Вам автоматически предоставляется массив закладок для работы.
Там же - пример.

Последний раз редактировалось mihali4; 16.12.2007 в 21:49.
mihali4 вне форума Ответить с цитированием
Старый 16.12.2007, 17:50   #8
Cyn4uk
Пользователь
 
Регистрация: 25.11.2007
Сообщений: 56
По умолчанию

О, спасибо!

Если у кого-то будет подобный вопрос, вот код:

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  i, j: Integer;
  s: string;
begin
  if DBGrid1.SelectedRows.Count>0 then
    with DBGrid1.DataSource.DataSet do
      for i:=0 to DBGrid1.SelectedRows.Count-1 do
      begin
        GotoBookmark(pointer(DBGrid1.SelectedRows.Items[i]));
        for j := 0 to FieldCount-1 do
        begin

          if (j>0) then s:=s+', ';
          s:=s+Fields[j].AsString;
        end;
        Listbox1.Items.Add(s);
        s:= '';
      end;
end;
Cyn4uk вне форума Ответить с цитированием
Старый 17.12.2007, 12:05   #9
Pinya
Пользователь
 
Регистрация: 17.12.2007
Сообщений: 37
По умолчанию

Цитата:
Сообщение от mihali4 Посмотреть сообщение
Очень просто:
Код:
procedure TForm1.DBGrid1CellClick(Column: TColumn);
begin
Label1.Caption:=DBGrid1.SelectedField.AsString;
end;
выводит содержимое поля, куда вы ткнули мышкой.
Для вашего случая будет
Код:
procedure TForm1.DBGrid1CellClick(Column: TColumn);
begin
Label1.Caption:=IntToStr(DBGrid1.DataSource.DataSet.FieldValues['Id']);
end;
где ID - поле уникального идентификатора.
А как достать др. поля из DBGrid??? Не идентификатор.
Pinya вне форума Ответить с цитированием
Старый 17.12.2007, 14:19   #10
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
Сообщение от Pinya Посмотреть сообщение
А как достать др. поля из DBGrid??? Не идентификатор.
Странный вопрос...
Точно также... Просто укажете имя другого поля... это - для второго варианта кода.
Или, что еще проще - выберите мышкой нужное поле и первый вариант кода все вам покажет.

Последний раз редактировалось mihali4; 17.12.2007 в 14:24.
mihali4 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
DBGrid DOLBY Компоненты Delphi 29 08.10.2008 00:05
Вопрос наверное про функции, а так точно даже не знаю про что. (Вопрос начинющего #6) Albert2008 Общие вопросы Delphi 4 21.08.2008 15:33
вопрос по сокетам и общение как в ICQ.Сложный вопрос... Руслантус Общие вопросы C/C++ 2 12.08.2008 21:10
Вопрос про DBGrid и дату HOVER БД в Delphi 3 31.05.2008 19:53
DBGrid 1nurik1 БД в Delphi 17 17.07.2007 17:20