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

asd

Пользователи
  • Постов

    3
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные asd

  1.  

     

     

    но этот код удаляет все колонки 

    просто у меня такого нет

     

    Видимо, я не точно выразился. Я имел в виду, что если колонки были определены автоматически (не определялись в designtime), то добавление новой колонки в runtime удаляет их и создает единственную новую колонку. Это не означает, что добавление новых колонок (>1) невозможно.

  2.  

    Всем доброго дня!

     

    Задавал этот вопрос на Stackowerflow, но ответа не получил даже с учетом выделенного bounty http://stackoverflow.com/q/32258525/5043424. Сущность вопроса в следующем. Создается колонка для FMX TGrid: 

    type
      TDatecell = class(TCalendarEdit)
      end;
    
      TDateColumn = class(TColumn)
      private
        function CreateCellControl: TStyledControl; override;
      public
        constructor Create(AOwner: TComponent); override;
      end;
    ...
    constructor TDateColumn.Create(AOwner: TComponent);
    begin
      inherited;
    end;
    
    function TDateColumn.CreateCellControl: TStyledControl;
    begin
      Result := TDatecell.Create(Self);
    end;
    

    Все работает. Такую колонку можно добавить в TGrid. Не получается ее связать с полем FDQuery, получающим данные из поля MySQL типа date. 

    Пробовал в runtime вызывать нечто такое:

    LinkGridToDataSourceBindSourceDB1.Columns.Add;
    LinkGridToDataSourceBindSourceDB1.Columns.Items
    [LinkGridToDataSourceBindSourceDB1.Columns.Count-1].
    MemberName:='date_set_by_user';
    

    но этот код удаляет все колонки (если они определялись автоматически по списку полей) и добавляет единственную колонку - экземпляр класса TColumn. Подскажите, как связать колонку своего типа с TDataSet или как указать свой тип колонки в LinkGridToDataSourceBindSourceDB1.Columns? Я представляю, как заполнить TGrid вручную, но, мне кажется, это замедлит код и вынудит писать обработчики изменения DataState и вручную прописывать все изменения во всех ячейках в DataSet, а также реакцию DS на изменение выделения строки в TGrid. OnGetValue не срабатывает, если есть LiveBindings Link... Подскажите, пожалуйста, как это сделать. Застрял...

     

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

    альясы запроса у меня с шириной сразу, это очень удобно - к примеру пишите select name as ФИО_150 from...вот и вам и имя и ширина сразу )

    важно подчеркивание ставить просто в конце...

    var
      vSp: МойДатасет;
      c: TLinkGridToDataSourceColumn;
      i,k: integer;
    begin
        LinkGrd.Columns.Clear;
        for i := 0 to vSp.FieldCount - 1 do
        begin
          c := LinkGrd.Columns.Add;
          c.MemberName := vSp.Fields[i].FullName;
          k := Pos('_',c.MemberName);
          if k > 0 then
          begin
            c.Width := copy(c.MemberName,k+1,length(c.MemberName)-k).ToInteger;
            c.Header := copy(c.MemberName,1,k-1);
          end
          else
          begin
            c.Width := 100;
            c.Header := c.MemberName;
          end;
        end;
    end;
    

     

    Здравствуйте, Rustam_D! Спасибо за внимание к моей проблеме, но, к сожалению, Ваш код не дает ответа на мой вопрос. Я могу создать колонку(и) - экземпляр(ы) TColumn и делал это точно таким же образом. Пример такого кода присутствует в моем вопросе. Я не знаю, как сделать так, чтобы колонка была экземпляром именно объявленного мной класса TDateColumn а не стандартного TColumn.

  3. Всем доброго дня!

     

    Задавал этот вопрос на Stackowerflow, но ответа не получил даже с учетом выделенного bounty http://stackoverflow.com/q/32258525/5043424. Сущность вопроса в следующем. Создается колонка для FMX TGrid: 

    type
      TDatecell = class(TCalendarEdit)
      end;
    
      TDateColumn = class(TColumn)
      private
        function CreateCellControl: TStyledControl; override;
      public
        constructor Create(AOwner: TComponent); override;
      end;
    ...
    constructor TDateColumn.Create(AOwner: TComponent);
    begin
      inherited;
    end;
    
    function TDateColumn.CreateCellControl: TStyledControl;
    begin
      Result := TDatecell.Create(Self);
    end;
    

    Все работает. Такую колонку можно добавить в TGrid. Не получается ее связать с полем FDQuery, получающим данные из поля MySQL типа date. 

    Пробовал в runtime вызывать нечто такое:

    LinkGridToDataSourceBindSourceDB1.Columns.Add;
    LinkGridToDataSourceBindSourceDB1.Columns.Items
    [LinkGridToDataSourceBindSourceDB1.Columns.Count-1].
    MemberName:='date_set_by_user';
    

    но этот код удаляет все колонки (если они не были определены и определялись автоматически согласно списка полей) и добавляет вместо них колонку - экземпляр класса TColumn. Подскажите, как связать колонку своего типа с TDataSet или как указать свой тип колонки в LinkGridToDataSourceBindSourceDB1.Columns? Я представляю, как заполнить TGrid вручную, но, мне кажется, это замедлит код и вынудит писать обработчики изменения DataState и вручную прописывать все изменения во всех ячейках в DataSet, а также реакцию DS на изменение выделения строки в TGrid. OnGetValue не срабатывает, если есть LiveBindings Link... Подскажите, пожалуйста, как это сделать. Застрял...

×
×
  • Создать...