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

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

Как добавить запись в DBGrid? [D7]


Страницы:   1 2

JazY ©   (2005-12-03 17:02:00) 

Мне нужно записывать текст в одном поле DBGrid, если в другом поле появился определенный текст. К примеру, я забил в поле "Товар", текст "ТоварА", тут же автоматически в DBGrid, но в поле "Завод" должен появиться текст "Завод 1". Как отловить появления текста в ячейке, я наверное, понял:
В OnDrawColumnCell я пишу
if (Column.FieldName = 'Товар') then
if (Column.Field.Asstring = 'ТоварА') then begin


Но вот как добавить текст в той же строке, но в другое поле никак не разберусь, т.к только начал работать с БД. Подскажите исходник, а? Заранее спасибо.


Anatoly Podgoretsky   (2005-12-05 16:02:00) [21]

Какое состояние грида надо изменить?


JazY   (2005-12-05 15:53:00) [22]


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

Етить колотить! Вот оно как! Люди! Объясните ламеру от Делфи, как же изменить состояние грида? Как сделать чтобы не зацикливалось? Мне действительно очень важно выполнить указанную задачу!


ЮЮ   (2005-12-05 03:42:00) [23]

>Как лечить? Что делать?
Понять, что единожды вызвавшись, этот обработчик будет вызываться непрерывно, ибо после  

adotable1.Edit;
adotable1.FieldByName('Готовность').AsString:='ok';

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


ЮЮ   (2005-12-05 03:29:00) [24]

>К примеру, я забил в поле "Товар", текст "ТоварА", тут же автоматически в DBGrid, но в поле "Завод" должен появиться текст "Завод 1".

А почему "Завод 1"? Это что "пятничная загадка"? "ЗаводА" было бы логичнее :)

>Подскажите исходник, а? Заранее спасибо.
Похоже, ты создаещь нечто уникальное, так что исходники только у тебя :)


JazY   (2005-12-05 03:04:00) [25]

Попробовал в этом событие. Вот какой код использую:
procedure TForm1.DataSource1DataChange(Sender: TObject; Field: TField);
begin
if (dbgrid1.Columns.Items[dbgrid1.SelectedIndex].FieldName = 'Ïðоизводство') then
if (dbgrid1.Columns.Items[dbgrid1.SelectedIndex].Field.AsString='*') then begin
adotable1.Edit;
adotable1.FieldByName('Готовность').AsString:='ok';
end;

Выдает ошибку типа "Stack overflow". Точно не скажу, поскольку в результате все напрочь виснет, а если запускать программу, то при выполнение этого кода вообще все напрочь виснет. Как лечить? Что делать?

Еще раз оговорюсь, что цель поймать появление определенного текста в столбце "Производство" и затем в той же строке, но в другом поле (Готовность) указать текст "ок"!


Плохиш   (2005-12-05 01:09:00) [26]

TDataSource.OnDataChange


JazY   (2005-12-05 00:56:00) [27]

Я, наверное, несколько преувеличил, что задача решена. Вот использую такой код:

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
 DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
holdColor: TColor;
begin
if (Column.FieldName = 'Производство') then
if (Column.Field.Asstring = '*') then begin
adotable1.Edit;
adotable1.FieldByName('Готовность').AsString:='ok';
end;

Но проблема в том, что это событие происходит на событие DrawColumnCell. Мне кажется, что это неправильно. Первоначально это событие использовалось для выделения ячеек определенным цветом, но отлавливать появления новых значений (для чего собственно и создавался выше указанный код) необходимо видимо в другом событии? Как вы считаете в каком событие нужно отлавливать появление определенного текста и как изменится тогда код?


JazY   (2005-12-04 20:01:00) [28]

Ответ нашел. Тему можно закрывать.


Страницы:   1 2

Наверх

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