Перейти к содержанию
Fire Monkey от А до Я
  • 0

10.2 Столбцы с combobox'aми


d.OnizZz

Вопрос

Рекомендуемые сообщения

  • 0
В 12.11.2018 в 11:39, d.OnizZz сказал:

При переходе с 10.0 на 10.2 стал недоступен метод у TColumn CreateCellControl
И как теперь сделать реализацию с столбцом combobox ?

Для начала реализуем наследника TComboBox (для переопределения методов GetData, SetData):

implementation
  
type
  TComboBoxCell = class(TComboBox)
  private
    FOldValue: TValue;
    FInSetData: boolean;
  protected
    constructor Create(AOwner: TComponent); override;
    function GetData: TValue; override;
    procedure SetData(const Value: TValue); override;
  end;

{ TComboBoxCell }

constructor TComboBoxCell.Create(AOwner: TComponent);
begin
  inherited;
  FInSetData := false;
end;

function TComboBoxCell.GetData: TValue;
begin
  If ItemIndex = -1 then
    result := FOldValue
  else
    result := Items[ItemIndex];
end;

procedure TComboBoxCell.SetData(const Value: TValue);
var
  S: string;
  LIndex: integer;
begin
  if not FInSetData then
    try
      FInSetData := True;
      FOldValue := Value;
      if FOldValue.IsEmpty then
        ItemIndex := -1
      else if FOldValue.TryAsType<string>(S) then
      begin
        LIndex := Items.IndexOf(Value.ToString);
        if LIndex >= 0 then
          ItemIndex := LIndex;
      end
      else
        inherited;
    finally
      FInSetData := False;
    end;
end;

После чего опишем действие на событие TGrid.OnCreateCustomEditor:

procedure TForm.FMXGridCreateCustomEditor(Sender: TObject;
  const Column: TColumn; var Control: TStyledControl);
var
  tmpCombo: TCombobox;
begin
  //Вызываем кастомный редактор для конкретного столбца
  if Column.Header.Equals('CategoryName') then begin
    tmpCombo := TComboBoxCell.Create(nil);
    tmpCombo.OnChange  := DoOnChangeCustomEditor;
    tmpCombo.TagObject := Column;

    tmpCombo.Items.Add('Item1');
    tmpCombo.Items.Add('Item2');
    tmpCombo.Items.Add('Item3');
     
    Control := tmpCombo;
  end;
end;

И последнее, опишем событие OnChange нашего редактора:

procedure TForm.DoOnChangeCustomEditor(Sender: TObject);
var
  Column: TColumn;
begin
  Column := TColumn(TCombobox(Sender).TagObject);
  TCombobox(Sender).Data := TCombobox(Sender).Selected.Text;
  Column.EditorModified;
end;

 

Ссылка на комментарий
  • 0
В 09.01.2019 в 00:54, Nick Peterson сказал:

И как сделать теперь колонку с кнопками?:))

А там немного гемор. )

Рекомендую, разобрать код класса TCheckCell (FMX.Grid.Style). как отправную точку.

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...