Форум: "Базы";
Текущий архив: 2003.06.26;
Скачать: [xml.tar.bz2];
Внизgrid Найти похожие ветки
← →
Ann (2003-05-29 10:25) [0]Добрый день!
Подскажите пожалуйста,как в гриде сделать вычисляемое поле, чтобы при заполнении грида одно из полей преобразовывалось через мою процедуру..
Вопрос наверное простой, просто надобности раньше не было в этом :)
← →
Zacho (2003-05-29 10:32) [1]
> Ann © (29.05.03 10:25)
Не совсем понял вопрос, но наверное - в датасете создать calculated поле и написать обработчик OnCalcFields ?
← →
Lord Warlock (2003-05-29 10:33) [2]Событие OnDrawCell
← →
Ann (2003-05-29 10:39) [3]если напишу через DrawColumnCell должно же работать?
и еще глупый вопрос... как написать - записать в столбец допустим 13 следующее значение?
FrSpr.DBGrid_kontr.Columns[13] а дальше (глупо конечно.. но не соображу.. ) :(
← →
Danilka (2003-05-29 10:44) [4]а все-таки, почему именно в гриде, почему не использовать стандартную, отличную возможнось: делать вычисляемые поля в датасете?
← →
stone (2003-05-29 10:46) [5]
> Ann © (29.05.03 10:39)
Данные пишуться в поле НД, а не в грид, если же обращаться через грид, тогда:
FrSpr.DBGrid_kontr.Columns[13].Field.Value :=
← →
Ann (2003-05-29 10:47) [6]
> Danilka © (29.05.03 10:44)
а как? и там будет возможность вызвать процедуру преобразования из программы?
← →
Zacho (2003-05-29 10:48) [7]
> Ann © (29.05.03 10:25)
> Подскажите пожалуйста,как в гриде сделать вычисляемое поле,
> чтобы при заполнении грида одно из полей преобразовывалось
> через мою процедуру..
Если надо, чтобы при вводе значение поля как-то преобразовывалось, и в датасете сохранялось уже преобразованное - то смотри TField.OnSetText А DBGrid здесь вообще ни причем, он только отображает данные из датасета.
← →
Ann (2003-05-29 10:51) [8]stone ©
мне не нужно записывать в нд, мне нужно просто преобразование на экран, а нд должно оставаться таким как и раньше..
пишу в DrawColumnCell
adres_preob; //вызов процедуры преобразования
FrSpr.DBGrid_kontr.Columns[13].Field.value:=stroka_out;//передаю преобразованную строку
пишет ошибку..
может кто подскажет почему?
← →
Zacho (2003-05-29 10:54) [9]
> Ann © (29.05.03 10:51)
Тогда смотри TField.OnGetText - и в нем и делай преобразование. А если это поле не нужно редактировать - то просто создай calculated поле в датасете.
← →
Danilka (2003-05-29 10:54) [10]Ann © (29.05.03 10:51)
для твоих целей, лучше все-таки вычисляемые поля.
добавляешь в датасет вычисляемое поле, а для его заполнения пишешь обработчик события датасета OnCalcFields.
посмотри хелп по вычисляемым полям и по этому событию.
Но, наверняка, кто-нибудь девушке поможет с примерами :))
← →
stone (2003-05-29 10:56) [11]
> FrSpr.DBGrid_kontr.Columns[13].Field.value:=stroka_out;//передаю
> преобразованную строку
Здесь ты присваиваешь полю значение, которое содержится в stroka_out
> мне не нужно записывать в нд, мне нужно просто преобразование
> на экран, а нд должно оставаться таким как и раньше..
> пишу в DrawColumnCell
if Column.Index = 13 then
...
← →
Ann (2003-05-29 11:01) [12]Danilka © (29.05.03 10:54)
а как добавить в нд вычисляемое поле? :)
← →
Lord Warlock (2003-05-29 11:06) [13]гм, а я сначала подумал что речь идет об обычном гриде.
Для баз данных действительно лучшим вариантом является использование вычисляемых полей.
Счелкаем правой кнопкой по компоненту (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:12) [14]Lord Warlock © (29.05.03 11:06)
спасибо ! :)
← →
Ann (2003-05-29 11:34) [15]всем большое спасибо. все получилось :)
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.06.26;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.03 c