Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

grid [D6, FB]


Ann ©   (2003-05-29 10:25:00) 

Добрый день!
Подскажите пожалуйста,как в гриде сделать вычисляемое поле, чтобы при заполнении грида одно из полей преобразовывалось через мою процедуру..
Вопрос наверное простой, просто надобности раньше не было в этом :)


Ann   (2003-05-29 11:34:00) [1]

всем большое спасибо. все получилось :)


Ann   (2003-05-29 11:12:00) [2]

Lord Warlock © (29.05.03 11:06)
спасибо ! :)


Lord Warlock   (2003-05-29 11:06:00) [3]

гм, а я сначала подумал что речь идет об обычном гриде.

Для баз данных действительно лучшим вариантом является использование вычисляемых полей.

Счелкаем правой кнопкой по компоненту (Table или Query), с которым соединена сетка. Заходим в Fields Editor и добавляем существующие поля. Там же добавляем новое поле, пишем имя, нужный тип и ставим радиокнопку Calculated.

Далее переходим в инспектор объектов, и щелкаем на событии OnCalcFields Table или Query.

Пишем нужный код

procedure TForm1.Table1CalcFields(DataSet: TDataSet);
begin
DataSet["ИмяВычисляемогоПоля"]:=DataSet["ИмяСуществующегоПоля1"]+DataSet["ИмяСуществующегоПоля2"];
end;


или же присваивается результат собственной функции или что угодно.


Ann   (2003-05-29 11:01:00) [4]

Danilka © (29.05.03 10:54)
а как добавить в нд вычисляемое поле? :)


stone   (2003-05-29 10:56:00) [5]


> FrSpr.DBGrid_kontr.Columns[13].Field.value:=stroka_out;//передаю
> преобразованную строку


Здесь ты присваиваешь полю значение, которое содержится в stroka_out


> мне не нужно записывать в нд, мне нужно просто преобразование
> на экран, а нд должно оставаться таким как и раньше..
> пишу в DrawColumnCell


if Column.Index = 13 then
...


Zacho   (2003-05-29 10:54:00) [6]


> Ann © (29.05.03 10:51)

Тогда смотри TField.OnGetText - и в нем и делай преобразование. А если это поле не нужно редактировать - то просто создай calculated поле в датасете.


Danilka   (2003-05-29 10:54:00) [7]

Ann © (29.05.03 10:51)
для твоих целей, лучше все-таки вычисляемые поля.

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

Но, наверняка, кто-нибудь девушке поможет с примерами :))


Ann   (2003-05-29 10:51:00) [8]

stone ©
мне не нужно записывать в нд, мне нужно просто преобразование на экран, а нд должно оставаться таким как и раньше..
пишу в DrawColumnCell
adres_preob; //вызов процедуры преобразования
FrSpr.DBGrid_kontr.Columns[13].Field.value:=stroka_out;//передаю преобразованную строку
пишет ошибку..
может кто подскажет почему?


Zacho   (2003-05-29 10:48:00) [9]


> Ann © (29.05.03 10:25)
> Подскажите пожалуйста,как в гриде сделать вычисляемое поле,
> чтобы при заполнении грида одно из полей преобразовывалось
> через мою процедуру..

Если надо, чтобы при вводе значение поля как-то преобразовывалось, и в датасете сохранялось уже преобразованное - то смотри TField.OnSetText А DBGrid здесь вообще ни причем, он только отображает данные из датасета.


Ann   (2003-05-29 10:47:00) [10]


> Danilka © (29.05.03 10:44)

а как? и там будет возможность вызвать процедуру преобразования из программы?


stone   (2003-05-29 10:46:00) [11]


> Ann © (29.05.03 10:39)


Данные пишуться в поле НД, а не в грид, если же обращаться через грид, тогда:
FrSpr.DBGrid_kontr.Columns[13].Field.Value :=


Danilka   (2003-05-29 10:44:00) [12]

а все-таки, почему именно в гриде, почему не использовать стандартную, отличную возможнось: делать вычисляемые поля в датасете?


Ann   (2003-05-29 10:39:00) [13]

если напишу через DrawColumnCell должно же работать?
и еще глупый вопрос... как написать - записать в столбец допустим 13 следующее значение?
FrSpr.DBGrid_kontr.Columns[13] а дальше (глупо конечно.. но не соображу.. ) :(


Lord Warlock   (2003-05-29 10:33:00) [14]

Событие OnDrawCell


Zacho   (2003-05-29 10:32:00) [15]


> Ann © (29.05.03 10:25)

Не совсем понял вопрос, но наверное - в датасете создать calculated поле и написать обработчик OnCalcFields ?


Наверх

Титульная страница Поиск, карта сайта Написать письмо