Создание формы ввода информации

Valdemar
Дата: 09.10.2006 07:56:25
Требуеться:
Вносить данные об объекте, при этом они храняться в разных таблицах,
для пользователя надо чтобы выглядело так

таблица с двумя столбцами:
1. название параметра;
2. значение.

например объект "стол"

Количество ножек: 4;
Форма стола: Круглый;

и т.п.

При этом значение параметра может заполняться пользователем
а может быть предложен выбор возможного значения.

1. Как это лучше всего реализовать?
2. Если кто-то подобное делал, не откажусь от полезных советов.
Anatoly Podgoretsky
Дата: 09.10.2006 08:06:36
1. использовать форму, она позволит не ограничиваться одной таблицей. Видимо тебе нужен TStringGrid на две колонки и кнопки - Записать/Отмена
2. в чем собственно вопрос?
Shr
Дата: 09.10.2006 08:15:11
Я делал набор параметров для отчета - произвольного типа, с возможностью выбора значения из справочника. DevExpress грид, редактор колонки "значение" меняется перед редактированием. Что-то вроде:
  FieldEditorClasses: array [ftUnknown..ftGraphic] of TcxCustomEditClass = (
    TcxTextEdit,            // ftUnknown
    TcxTextEdit,            // ftString
    TcxSpinEdit,        // ftSmallint
    TcxSpinEdit,        // ftInteger
    TcxSpinEdit,        // ftWord
    TcxCheckBox,       // ftBoolean
    TcxCalcEdit,        // ftFloat
    TcxCurrencyEdit,    // ftCurrency
    TcxCalcEdit,        // ftBCD
    TcxDateEdit,        // ftDate
    TcxTimeEdit,        // ftTime
    TcxDateEdit,        // ftDateTime ?!
    nil,                  // ftBytes
    nil,                  // ftVarBytes
    nil,                  // ftAutoInc
    TcxBlobEdit,        // ftBlob
    TcxMemo,            // ftMemo
    TcxBlobEdit      // ftGraphic
  );

function GetFieldTypeEditor(AFieldType: TFieldType): TcxCustomEditClass;
begin
  if AFieldType in AllowedFieldTypes then
    Result := FieldEditorClasses[AFieldType]
  else
    Result := nil;
end;

...

// Grid.OnEditing event handler code

  EditorClass := GetFieldTypeEditor(Param.DataType);
  if Assigned(EditorClass) then
  begin
    FGridView.Columns[1].PropertiesClass := EditorClass.GetPropertiesClass;
    TEditPropertiesCrack(FGridView.Columns[1].Properties).ImmediatePost := true;
  end
  else
    FGridView.Columns[1].PropertiesClass := nil;
Какой должен быть ValueTypeClass у этой колонки, не разбирался. У меня стоит TcxStringValueType, это криво, но работает.
Valdemar
Дата: 09.10.2006 10:05:02
автор
to Anatoly Podgoretsky

Вот так и сделал, но есть свои недочеты,
при перерисовки экрана, и если появляется количество параметров больше чем помещаеться, то надо листать список, и там тоже не очень хорошо, перересовываеться.

сделал всплывающие элементы управления, ComboBox и т.п. под каждый тип параметра.

Просто думал что есть еще способ, более лучший.
Petro123
Дата: 09.10.2006 10:21:23
Valdemar

вопрос по организации БД или клиенту?
Если первое, то 3 таблицы по EAV (поиск по форуму "проектирование БД").
Если второе, то "таблица должна знать" какой у неё параметр в каждой строке(числовой, чтроковый, перечислимый, .........(таблица - "список атрибутов" по EAV) ).
Anatoly Podgoretsky
Дата: 09.10.2006 13:25:14
Valdemar
автор
to Anatoly Podgoretsky

Вот так и сделал, но есть свои недочеты,
при перерисовки экрана, и если появляется количество параметров больше чем помещаеться, то надо листать список, и там тоже не очень хорошо, перересовываеться.

сделал всплывающие элементы управления, ComboBox и т.п. под каждый тип параметра.

Просто думал что есть еще способ, более лучший.

А если у тебя список будет несколько десятков метров, что тогда будешь делать, пойдешь в хозяйственный магазин?
ComboBox это тое прокрутка.
Valdemar
Дата: 09.10.2006 13:39:10
автор
А если у тебя список будет несколько десятков метров, что тогда будешь делать, пойдешь в хозяйственный магазин?
ComboBox это тое прокрутка.

не понял про последнее предложение
Anatoly Podgoretsky
Дата: 09.10.2006 13:44:33
Ну мыло там, веревка.
Valdemar
Дата: 09.10.2006 14:01:06
да нет, про ComboBox? где вы написали.