![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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 ?