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


Автор: Hatigatsu 12.12.2006, 11:50
Здравствуйте. Помогите решить вот такой вопрос:
У меня есть DBGrid1 с одним полем, как узнать значение ячейки в этом поле на которую наводится стрелочка чёрная с лева треугольная (родная стрелочка DBGrid'а). Очень нужно. smile 

Автор: Insert 12.12.2006, 12:18
обратись к Table или Query, которые связаны с этим гридом через св ва:
Table1.FieldByName('Название поля').Asstring - здесь будет лежать текущее значение поля, то же самое для Query.

Автор: x77 12.12.2006, 16:21
таблицы (TTable) и запросы (TQuery), когда они активны, в любой момент времени "указывают" на одну запись. запись состоит из полей, и получить значения этих полей, как уже было сказано, можно свойством Fields [n].Value, где n - порядковый номер поля в записи (индексация с нуля). также имеют право на жизнь обращения через FieldByName (FieldName).Value, которые позволяют обратиться к полю по его имени. что же касается грида, то у него есть свойство SelectedField, которое возвращает поле, на котором в данный момент находится фокус грида. т.е. для того, чтобы обратиться к выделенному в игрде полю, нужно написать

Код
DbGrid1.DataSource.DataSet.FieldByName (DbGrid1.SelectedField.FieldName).Value
.

это общий случай. как правило, можно решить проще: Table1.FieldByName (DbGrid1.SelectedField.FieldName).Value.

а вот что касается "треугольной стрелочки", то она указывает не на поле, а на запись. если бы у вас было 100 полей, эта "стрелочка" всё равно бы находилась всегда слева от самого первого поля. поэтому в вашем случае, при таблице из одного поля, обратиться к этому полю текущей записи можно ещё проще:

Код
Table1.Fields [0].Value
 - этот код всегда вернёт значение того поля и той записи, на которой стоит курсор в DbGrid, при условии, что поле всего одно smile

Автор: Hatigatsu 12.12.2006, 18:20
x77, Insert, Большое Спасибо. Попробую.

Автор: Hatigatsu 12.12.2006, 18:35
Всё работает замечательно. Но вот такое дело. Я в событии onChange у Edit ' a использую ADOQuery1.Locate(Fields,Edit.text,[loPartialKey]). Как видно при совпадении первых букв текста с имеющимися в Базе словами, стрелочка в DBGrid наводится на похожее слово. В общем, как мне отследить куда навелась стрелочка (не знаю как это ещё выразить), и взять текст из ячейки.
Пробовал с помощью DataSource2DataChange всё прекрасно, о большем и мечтать не стоит, но вот если тышнешь на какую-нибудь ячейку и зажмешь стрелку вниз, при прокручивании, верхние ячейки копируют ячейку на которую нажал.

Автор: Insert 12.12.2006, 18:40
если твоя функция ADOQuery1.Locate(Fields,Edit.text,[loPartialKey]) вернет true, то значит что она нашла что то, эта функция сразу делает найденную запись активной и считать из неё значение можно с помощью все тех же процедур, о которых говорилось выше.

Автор: Hatigatsu 12.12.2006, 19:58
x77, Insert,  СпасиБо ещё раз. Получается, как вы и сказали.
Отдельное спасибо за 
Код

DbGrid1.DataSource.DataSet.FieldByName (DbGrid1.SelectedField.FieldName).Value

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