Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Доступ к данным ячеек в DBGrid'e 
:(
    Опции темы
FFire
Дата 5.5.2006, 22:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 30.4.2006

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



Ни как не могу решить проблемку:
Как получить доступ к значению в ячейке DBGrid'а...
Т.е. имеется номер столбца/строки DBGrid'а, (х,у) а как поиметь данные типа cells(x,y) именно из DBGrid'а а не из DataSource? 
PM MAIL   Вверх
Fazil6
Дата 5.5.2006, 22:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата

как поиметь данные типа cells(x,y) именно из DBGrid'а а не из DataSource

никак. 
Grid данные только отображает, а не владеет ими. Никак кроме как через соответствующий DataSet ты до данных не доберешься. 
PM MAIL   Вверх
FFire
Дата 5.5.2006, 23:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 30.4.2006

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



 --- Grid данные только отображает....

Ок.
Но что делать если очень надо ))

У меня зреет такой вариант: при отрисовке ячейки запихивать данные в массив (благо нужна не вся таблица, а только одно поле) и потом обращаться к этому массиву вроде как к ДБГриду. Как на это смотрите? 
PM MAIL   Вверх
Savek
Дата 6.5.2006, 08:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 355
Регистрация: 10.4.2006
Где: Воронеж

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



Зачем так извращаться? чем не устраивает DataSet? 
PM MAIL   Вверх
Dynamic
Дата 6.5.2006, 08:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 372
Регистрация: 5.7.2004
Где: Салехард

Репутация: 2
Всего: 15



DBGridEh.SelectedField.......

Добавлено @ 08:25 
про DBGrid не помню, есть ли такое св-во...  

Это сообщение отредактировал(а) Dynamic - 6.5.2006, 08:28


--------------------
Было бы о чем молчать, а уж что сказать – всегда найдется...
PM MAIL WWW   Вверх
Fazil6
Дата 6.5.2006, 09:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата

Но что делать если очень надо ))

У меня зреет такой вариант: при отрисовке ячейки запихивать данные в массив (благо нужна не вся таблица, а только одно поле) и потом обращаться к этому массиву вроде как к ДБГриду. Как на это смотрите? 

не очень понятен смысл такого алгоритма. Какая тебе разница откуда ты для массива будешь брать значения из грида или DataSet ? 
PM MAIL   Вверх
Vit
Дата 7.5.2006, 05:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 14
Всего: 207



можно конечно гланды удалять через задницу и автогеном.... но не лучше ли как это принято... Смысл брать что-то прямо из DBGrid до меня плохо доходит... чем не устраивают корреспондентные поля...


PS. Новичкам бы вообще запретил пользоваться DBGrid... действует развращающе на неокрепшие знания... Совет будет - забыть вообще о существовании DBGrid на пол года, стереть его и не использовать, через пол года работы с базами данных прийдёт понимание как это всё работает и такие вопросы отпадут сами собой 


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
FFire
Дата 7.5.2006, 06:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 30.4.2006

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



Цитата(Vit @ 7.5.2006,  05:30)
чем не устраивают корреспондентные поля...

А что такое корреспондентные поля?
Где можно о них почитать?



 
PM MAIL   Вверх
Dynamic
Дата 10.5.2006, 05:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 372
Регистрация: 5.7.2004
Где: Салехард

Репутация: 2
Всего: 15



Поля БД, которые отображаются в гриде.
Vit имел ввиду, что программно работать с данными надо через набор данных (DataSet, Query), а не через грид. Грид - для конечного пользователя программы, а не для программиста. 


--------------------
Было бы о чем молчать, а уж что сказать – всегда найдется...
PM MAIL WWW   Вверх
FFire
Дата 10.5.2006, 09:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 30.4.2006

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



Ну понятно, естественно я через DataSet, Query работаю, добавление удаление и т.п.
Дело в другом. 
Хорошо поставлю вопрос иначе.
Пользователь выбирает в дбГриде запись (записи), мышкой водит по другим записям, а в мемо в это время выводится инфа на основании выбраной записи (или записей) и той записи над которой висит мышка.
Так вот, каким образом получить данные над которыми висит мышка (не обязательно из самого дбГрида, но обязательно те данные над которой мышь все еще висит)??

 
PM MAIL   Вверх
Dynamic
Дата 10.5.2006, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 372
Регистрация: 5.7.2004
Где: Салехард

Репутация: 2
Всего: 15



что значит
Цитата(FFire @  10.5.2006,  09:58 Найти цитируемый пост)
мышкой водит по другим записям


при выборе строки в DBGrid мышкой или с клавиатуры или скроллом изменяется текущая запись НД, с нее и читай данные. 
или или еще перефразируй вопрос, потому как непонятно, чего ты хочешь..
 


--------------------
Было бы о чем молчать, а уж что сказать – всегда найдется...
PM MAIL WWW   Вверх
FFire
Дата 10.5.2006, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 30.4.2006

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



Мышкой водит, ну т.е. пользователь просто мышку перемещает, не выбирая запись. В Мемо же должна ложиться инфа по на основании уже выбранных записей и той над которой висит мышка. Что то на подобе OnHint. Только этот ОнХинт, как бы сказать, динамический и зависит не только от того над чем мышка находится но и какие записи уже выбраны. и проявляется он не как хинт (желтенькое поле) а как текст в Мемо. 
Да, очень похоже на Хинт, только без задержки.
К выбранным записям обратиться не проблема, а вот как обратится к записи которая не выделена, но над которой находится указатель (мышка по нашему)?

 
PM MAIL   Вверх
Alex
Дата 10.5.2006, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 17
Всего: 162



FFire, мда понимания конечно у вас отсутствует напрочь smile Ну, да ладно это дело поправимое, на сколько я вас понял вы хотите при перемещении мышки на ячейку, в которой текст полностью не помещается показать его в хинте. Так? 


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
FFire
Дата 10.5.2006, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 30.4.2006

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



Ну не в хинте, но типа того. 
PM MAIL   Вверх
Alex
Дата 10.5.2006, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 17
Всего: 162



А где? 


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
FFire
Дата 10.5.2006, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 30.4.2006

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



В мемо, на форме. 
PM MAIL   Вверх
Alex
Дата 10.5.2006, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 17
Всего: 162



это что же за издевательство вы хотите делать? 


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
Dynamic
Дата 11.5.2006, 08:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 372
Регистрация: 5.7.2004
Где: Салехард

Репутация: 2
Всего: 15



OnMouseMove + ItemAtPos() (не помню, что там у грида для этого) тебе в руки.... 


--------------------
Было бы о чем молчать, а уж что сказать – всегда найдется...
PM MAIL WWW   Вверх
Vit
Дата 11.5.2006, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 14
Всего: 207



Цитата(Alex @  10.5.2006,  08:33 Найти цитируемый пост)
это что же за издевательство вы хотите делать?  



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


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
FFire
Дата 12.5.2006, 07:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 30.4.2006

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



Цитата(Dynamic @ 11.5.2006,  08:30)
OnMouseMove + ItemAtPos() 

К сожалению, метода ItemAtPos, у дбГрида нет. 
PM MAIL   Вверх
bas
Дата 12.5.2006, 09:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 446
Регистрация: 14.8.2002
Где: Молдова, Кишинев

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



Цитата(Vit @  11.5.2006,  15:26 Найти цитируемый пост)
хотя задача прямо сказать не из стандартных и может не решаться  

Даже очень нестандартная.
1.Надо знать положение курсора на экране.
2.Узнать находиться ли курсор над гридом.
3.Вычислить поле над которым находимся.
4.Вычислить номер записи и вот тут надо повозиться, так как надо узнать какие записи на экране (скажем 10 из 2000).

Можно при периресовки грида загонять все данные(и координаты тоже) в массив и оттуда считывать.

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


Опытный
**


Профиль
Группа: Участник
Сообщений: 372
Регистрация: 5.7.2004
Где: Салехард

Репутация: 2
Всего: 15



показываю направление:
Код

procedure TForm1.DBGrid1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
var c: TGridCoord;
    f: tfield;
begin
     c := DBGrid1.MouseCoord(x, y);
     f := DBGrid1.DataSource.DataSet.Fields[c.x];  << ----- поле под курсором
end;

 


--------------------
Было бы о чем молчать, а уж что сказать – всегда найдется...
PM MAIL WWW   Вверх
Alex
Дата 12.5.2006, 11:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 17
Всего: 162



Цитата(Vit @  11.5.2006,  16:26 Найти цитируемый пост)
Алекс, если знаешь, помоги человеку... может действительно надо... хотя задача прямо сказать не из стандартных и может не решаться

Цитата

Написать можно все - главное четко представлять, что ты хочешь получить в конце.

Код

type 
  TMyDBGrid = class (TCustomDBGrid)
  protected
    function GetTitleOffset: Byte;
  public
    property TitleOffset: Byte read GetTitleOffset;
  end;

...

procedure TfrmMain.DBGrid1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var
  Cell: TGridCoord;
  DLink: TDataLink;
  OldActiveRec: Integer;
  MyGrid: TMyDBGrid;
  aTitleOffset: Byte;
begin
  if not (Sender is TDBGrid) then Exit;
  MyGrid:= TMyDBGrid(Sender);
  Cell:= MyGrid.MouseCoord(X, Y);
  DLink := MyGrid.DataLink;
  if Assigned(DLink) then begin
    aTitleOffset:= MyGrid.TitleOffset;
    if (Cell.X < MyGrid.IndicatorOffset) or (Cell.Y < aTitleOffset) then begin
      Memo1.Text:= '';
      Exit;
    end;
    OldActiveRec := DLink.ActiveRecord;
    try
      DLink.ActiveRecord := Cell.Y - aTitleOffset;
      Memo1.Text:= DBGrid1.Columns[Cell.X - MyGrid.IndicatorOffset].Field.AsString;
    finally
      DLink.ActiveRecord := OldActiveRec;
    end;
 end;
end;

{ TMyDBGrid }

function TMyDBGrid.GetTitleOffset: Byte;
var
  i: Integer;
  j: Integer;
begin
  Result:= 0;
  if dgTitles in Options then
  begin
    Result:= 1;
    if (Datalink <> nil) and (Datalink.Dataset <> nil) and Datalink.Dataset.ObjectView then begin
      for I := 0 to Columns.Count-1 do begin
        if Columns[i].Showing then begin
          j:= Columns[i].Depth;
          if j >= Result then Result:= j + 1;
        end;
      end;
    end;
  end;
end;


PS:
Кто скажет из какой статьи в DRKB сделан этот пример получит + (80% ответов на все ваши вопросы уже лежат у вас на компе, нужно просто поискать...) 


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
Dynamic
Дата 12.5.2006, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 372
Регистрация: 5.7.2004
Где: Салехард

Репутация: 2
Всего: 15



а можно мне?
Цитата

Как в TDBGrid узнать над каким полем висит мышь

 smile  smile  smile

Добавлено @ 12:11 
а вот еще в тему: "Как вывести Hint для ячейки DBGrid"

ЗЫ. Код не даю, ибо
Цитата(Alex @  12.5.2006,  11:42 Найти цитируемый пост)
80% ответов на все ваши вопросы уже лежат у вас на компе, нужно просто поискать...

 


--------------------
Было бы о чем молчать, а уж что сказать – всегда найдется...
PM MAIL WWW   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

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

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


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

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

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


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

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


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

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


 




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


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

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