Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[44.223.31.148] |
|
Сообщ.
#1
,
|
|
|
доброго дня! стоит такая задача, никак не могу разобраться: есть 2 компонента интересных: TcxImageComboBox и TNextGrid. заполнение TNextGrid происходит в обработчике TcxImageComboBoxPropetiesChange.
При переключении TcxImageComboBox меняются данные и в таблице, предварительно очищаясь, то есть TNextGrid.ClearRows. в некоторые строки пользователь вносит данные вручную с клавиатуры. теперь вопрос: как сделать так, чтобы при переключении TcxImageComboBoxPropetiesChange строки, в которые пользователь вводит данные вручную, не удалялись? |
Сообщ.
#2
,
|
|
|
pats
Так и удаляй не все строки, а делай проверку. Пробегай по всем строкам и если есть определенный признак, удаляй её. Например этим признаком может быть значение ридонли для строк не вводимых вручную. |
Сообщ.
#3
,
|
|
|
Guru, никак не получается
procedure TfrmCreate.cmbTypePropertiesChange(Sender: TObject); ... begin if cmbType.ItemIndex=-1 then cmbType.ItemIndex:=0; CDS.Data:=RunMethod('GetInfoAboutType',[cmbType.Text,1,ReturnCode,ErrorMessage]); end; TypeID:=cmbType.Properties.Items[cmbType.ItemIndex].Value; Index:=TypeIndexByID(TypeID); LockWindowUpdate(Handle); Tree.Items.Clear; GridAttrs.ClearRows;//если я убираю эту строку и делаю отдельно каждую, то строки табл. не очищаются. происходит накопление данных при каждом выборе в TcxImageComboBox PanelMiddle.DestroyComponents; PanelMiddle.Height:=0; Frames:=nil; while not CDS.Eof do begin CDS2.Data:=RunMethod('GetInfoAboutAttribute',[CDS.FieldByName('_NAME').AsString,2,ReturnCode,ErrorMessage]); CDS2.Filter:='_DEFAULT=1'; CDS2.Filtered:=True; if not CDS2.Eof then MeasureID:=CDS2.FieldByName('_ID_MEASURE').AsString else MeasureID:=''; CDS2.Filtered:=False; if CDS.FieldByName('_OBLIGATORY').AsInteger=0 then begin if CDS.FieldByName('_ATTRTYPE').AsInteger in [0,1,2,3,5] then begin GridAttrs.AddRow; GridAttrs.CellByName['ColImg',GridAttrs.LastAddedRow].AsInteger:=Icon_Attr; GridAttrs.CellByName['ColAttr',GridAttrs.LastAddedRow].AsString:=CDS.FieldByName('_NAME').AsString; GridAttrs.CellByName['ColAttrType',GridAttrs.LastAddedRow].AsInteger:=CDS.FieldByName('_ATTRTYPE').AsInteger; GridAttrs.CellByName['ColValueList',GridAttrs.LastAddedRow].AsString:=CDS.FieldByName('_LIST').AsString; GridAttrs.CellByName['ColMeasureID',GridAttrs.LastAddedRow].AsString:=MeasureID; GridAttrs.CellByName['ColValue',GridAttrs.LastAddedRow].AsString:=CDS.FieldByName('_DEFAULT').AsString; if CDS.FieldByName('_ATTRTYPE').AsInteger=3 then GridAttrs.CellByName['ColValue',GridAttrs.LastAddedRow].AsDateTime:=Date; if CDS.FieldByName('_NAME').AsString='Наименование' then GridAttrs.CellByName['ColValue',GridAttrs.LastAddedRow].AsString:=TypeList[Index].DefaultName; if CDS.FieldByName('_NAME').AsString='Отдел разработки' then GridAttrs.CellByName['ColValue',GridAttrs.LastAddedRow].AsString:=''; if CDS.FieldByName('_NAME').AsString='Разработал' then GridAttrs.CellByName['ColValue',GridAttrs.LastAddedRow].AsString:=''; if CDS.FieldByName('_NAME').AsString='Описание' then GridAttrs.CellByName['ColValue',GridAttrs.LastAddedRow].AsString:=''; end; end Добавлено условие я такое ставила: if not ColValue.Editing then begin if CDS.FieldByName('_NAME').AsString='Разработал' then GridAttrs.CellByName['ColValue',GridAttrs.LastAddedRow].AsString:='' end else if ColValue.Editing then begin if CDS.FieldByName('_NAME').AsString='Разработал' then GridAttrs.CellByName['ColValue',GridAttrs.LastAddedRow].AsString:='sddsc' end; |
Сообщ.
#4
,
|
|
|
Еще раз. Определись по каклиу признаку должгы очищаться строки. И вместо очистки всех строк сразу пробегись по всем строкам и удали только подподающие под условия
|