Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 07.04.2021, 15:47
svobodniy.agent svobodniy.agent вне форума
Прохожий
 
Регистрация: 04.02.2021
Сообщения: 13
Версия Delphi: Delphi 10
Репутация: 10
По умолчанию DBGrid и DBChart - выбор по галочках

Доброго времени суток! Помогите пожалуйста
1. Как реализовать выбор полей на DBGrid: есть 40+ полей в БД, как сделать так, чтобы в реальном времени пользователь мог выбирать поля для отображения (по типу Combobox, поставил галочку и поле отобразилось)?
2. И впоследствии отобразить данные из выбранных полей на DBTChart (в полях переменные типа Float, набитые числами)?
Спасибо!
Ответить с цитированием
  #2  
Старый 07.04.2021, 20:25
Аватар для Guaho
Guaho Guaho вне форума
Начинающий
 
Регистрация: 27.08.2017
Сообщения: 173
Версия Delphi: Delphi7
Репутация: 10
По умолчанию

Если речь идёт о столбцах грида, чтоб была возможность включить/выключить их отображение, Вы можете:
1) Воспользоваться компонентами EhLib (компонент TDBGridEh). Там такая возможность реализована (выпадающее меню с возможностью выбора видимых столбцов), ничего даже делать не надо.
2) Написать свой код. Например, у меня в программе для этого сделано отдельное окно. Понадобится отдельная таблица для хранения списка полей, т.к. количество их может быть переменным для разных гридов (если в программе несколько гридов). А видимость задаётся просто, через свойство
Код:
MyGrid.Columns[i].Visible
где i - номер столбца (нумерация от нуля до MyGrid.Columns.Count - 1).
А с Chart-ом надо Вам разобраться. Вот, например, в учебнике Фаронова (есть в сети) доступно расписано, как с ним работать. В двух словах не расскажешь, читать надобно!
Ответить с цитированием
  #3  
Старый 08.04.2021, 09:09
svobodniy.agent svobodniy.agent вне форума
Прохожий
 
Регистрация: 04.02.2021
Сообщения: 13
Версия Delphi: Delphi 10
Репутация: 10
По умолчанию

А можете пожалуйста более подробно расписать как реализовать кодом выбор полей в DBGrid?
Ответить с цитированием
  #4  
Старый 08.04.2021, 14:08
svobodniy.agent svobodniy.agent вне форума
Прохожий
 
Регистрация: 04.02.2021
Сообщения: 13
Версия Delphi: Delphi 10
Репутация: 10
По умолчанию

И вообще было бы идеально, если бы показали где в TDBGridhEh эта функция Установил себе эту библиотеку, но не могу найти это задать.
Ответить с цитированием
  #5  
Старый 08.04.2021, 14:44
Аватар для Guaho
Guaho Guaho вне форума
Начинающий
 
Регистрация: 27.08.2017
Сообщения: 173
Версия Delphi: Delphi7
Репутация: 10
По умолчанию

Непонятно, что конкретно Вам надо - код "от и до"? Тогда мой код Вам не подойдёт. Я примерно объяснил словами, но если этой информации недостаточно - тогда не разберётесь. Я сам сделал это окно и забыл, а теперь если заглянуть - много вопросов возникнет))) Кроме того, я использую грид от EhLib, там своя специфика (т.е. у простого DBGrid-а может не оказаться тех функций, что я использую).
Если приведу весь код - точно не разберётесь, т.к. к нему понадобится куча комментариев. И, повторюсь, без грида от EhLib он работать не будет!
Я не знаю, какая у Вас версия Делфи. Почему бы Вам не попробовать EhLib? Есть очень ранняя версия, которая была бесплатной, может она на вашу Делфи станет? В этом случае не надо будет писать никакого кода, нужная Вам функция уже встроена в грид.
Кроме того, этот грид обладает суперскими возможностями визуализации - цветные ячейки, отображение картинок в таблице, отображение чекбоксов. Можно перетаскивать, скрывать/отображать столбцы; можно сохранять вид грида в файл и читать при запуске программы. Есть встроенный поиск разных видов, возможность копирования и печати данных из грида, а также экспорта. Поддерживаются многострочные заголовки, щелчки по заголовкам столбцов и установка маркеров сортировки. Функций там очень много, долго перечислять. Оно того стоит! Этот грид имеет все свойства и функции стандартного + целую кучу своих.
Вот здесь можете скачать: https://drive.google.com/file/d/1ou1...ew?usp=sharing
Ответить с цитированием
  #6  
Старый 08.04.2021, 15:04
Аватар для Guaho
Guaho Guaho вне форума
Начинающий
 
Регистрация: 27.08.2017
Сообщения: 173
Версия Delphi: Delphi7
Репутация: 10
По умолчанию

Подключаете грид к источнику данных, чтоб шло отображение данных. Затем - в левом верхнем углу грида есть изображение треугольника, клацаете по нему, и в выпадающем меню найдёте нужный пункт отображения/скрытия столбцов. Задавать ничего не надо, всё уже сделано!
Ответить с цитированием
  #7  
Старый 08.04.2021, 15:16
svobodniy.agent svobodniy.agent вне форума
Прохожий
 
Регистрация: 04.02.2021
Сообщения: 13
Версия Delphi: Delphi 10
Репутация: 10
По умолчанию

Посмотрите пожалуйста на скриншот, не могу понять где этот "треугольник".
Изображения
Тип файла: png Screenshot_1.png (153.9 Кбайт, 2 просмотров)
Ответить с цитированием
  #8  
Старый 08.04.2021, 15:24
Аватар для Guaho
Guaho Guaho вне форума
Начинающий
 
Регистрация: 27.08.2017
Сообщения: 173
Версия Delphi: Delphi7
Репутация: 10
По умолчанию

По идее он должен отображаться по умолчанию. Раз нет, тогда в свойствах грида найдите свойство Indicator Title, раскройте его и установите свойство ShowDropDownSign в true.
Изображения
Тип файла: jpg 2021-04-08_152333.jpg (43.2 Кбайт, 1 просмотров)
Ответить с цитированием
Этот пользователь сказал Спасибо Guaho за это полезное сообщение:
svobodniy.agent (09.04.2021)
  #9  
Старый 09.04.2021, 15:07
svobodniy.agent svobodniy.agent вне форума
Прохожий
 
Регистрация: 04.02.2021
Сообщения: 13
Версия Delphi: Delphi 10
Репутация: 10
По умолчанию

Спасибо, разобрался) Подскажите пожалуйста еще такие вещи: а можно сделать эту менюшку в DBGridEh на английском и я читал, что в DBGridEh зашит экспорт в Excel - есть такое или надо руками код писать?
Ответить с цитированием
  #10  
Старый 09.04.2021, 16:52
Аватар для Guaho
Guaho Guaho вне форума
Начинающий
 
Регистрация: 27.08.2017
Сообщения: 173
Версия Delphi: Delphi7
Репутация: 10
По умолчанию

Чтобы изменить язык менюшки, надо смотреть исходники EhLib. Тут нужно найти модуль, где эта штука прописана (скорее всего файл должен иметь в своём имени слово "grid"). В своё время я на древней версии EhLib русифицировал окно прямой печати из таблицы. Так что и у Вас вполне может получиться. Это не сложно, главное, найти файл pas (скорее всего pas, но не факт), где это прописано.
Что же касается экспорта, то вот как сделано у меня:
Код:
{Процедура экспорта из грида g в файл формата Format:
 0 = TXT
 1 = RTF
 2 = HTML
 3 = CSV
 4 = Excel
 5 = Unicode
Действия после экспорта задаются в Act:
 0 - ничего не делать;
 1 - открыть файл;
 2 - выдать запрос открытия;
 3 - открыть папку с файлом.
Если в гриде есть выделенные строки (мультиселекция), то экспортируются только они, иначе - выводится весь набор данных.
}
procedure Tdm.ExpFromGrid(g: TDBGridEh; Format: Integer; Act: Integer);
  var all: boolean;
begin
  if g.DataSource.DataSet.RecordCount = 0 then
    begin
      PlaySound(PChar('SYSTEMEXCLAMATION'), 0, SND_ASYNC);
      Application.MessageBox('В наборе данных нет ни одной записи,' + #13 +
                             'поэтому экспорт невозможен.', ' Предупреждение', MB_ICONWARNING + MB_OK);
      exit;
    end;

  if g.SelectedRows.Count > 1 then all := false else all := true;
  sd1.FileName := '';

  case Format of
    0:  begin
          sd1.Filter := 'Текстовые файлы|*.txt';
          sd1.DefaultExt := 'txt';
          if sd1.Execute then SaveDBGridEhToExportFile(TDBGridEhExportAsText, g, sd1.FileName, all);
        end;
    1:  begin
          sd1.Filter := 'Файлы формата RTF|*.rtf';
          sd1.DefaultExt := 'rtf';
          if sd1.Execute then SaveDBGridEhToExportFile(TDBGridEhExportAsRTF, g, sd1.FileName, all);
        end;
    2:  begin
          sd1.Filter := 'Файлы Html|*.html';
          sd1.DefaultExt := 'html';
          if sd1.Execute then SaveDBGridEhToExportFile(TDBGridEhExportAsHTML, g, sd1.FileName, all);
        end;
    3:  begin
          sd1.Filter := 'Файлы CSV|*.csv';
          sd1.DefaultExt := 'csv';
          if sd1.Execute then SaveDBGridEhToExportFile(TDBGridEhExportAsCSV, g, sd1.FileName, all);
        end;
    4:  begin
          sd1.Filter := 'Файлы Excel|*.xls';
          sd1.DefaultExt := 'xls';
          if sd1.Execute then SaveDBGridEhToExportFile(TDBGridEhExportAsXLS, g, sd1.FileName, all);
        end;
    5:  begin
          sd1.Filter := 'Текстовые файлы|*.txt';
          sd1.DefaultExt := 'txt';
          if sd1.Execute then SaveDBGridEhToExportFile(TDBGridEhExportAsUnicodeText, g, sd1.FileName, all);
        end;
  end;

  case Act of
    0:  exit; //Вариант "ничего не делать".
    1:  ShellExecute(Handle, nil, PChar(sd1.FileName), nil, nil, SW_SHOWNORMAL); //Вариант "открыть файл".
    2:  begin
          PlaySound(PChar('SYSTEMEXCLAMATION'), 0, SND_ASYNC);
          if Application.MessageBox('Данные были успешно экспортированы в файл.' + #13 + 'Открыть этот файл ?',
                                  ' Подтверждение действия', MB_ICONQUESTION + MB_OKCANCEL ) = mrOK then
            ShellExecute(Handle, nil, PChar(sd1.FileName), nil, nil, SW_SHOWNORMAL);
        end;
    3:  begin //Вариант "открыть папку".
          ShellExecute(Handle, 'explore', PChar(ExtractFilePath(sd1.FileName)),
         end;
  end;
end;
А это вызов процедуры экспорта из окна, содержащего грид:
Код:
procedure Tfm_komp.mExpToTXTClick(Sender: TObject);
begin
  dm.ExpFromGrid(fg, TMenuItem(Sender).Tag, fm_param._cbAfterExport.itemIndex);
end;
(тут в свойстве Tag пунктов меню задаётся соответствующий тип экспорта для этого пункта меню).
Изображения
Тип файла: jpg Экспорт2021-04-09_165059.jpg (37.4 Кбайт, 2 просмотров)
Ответить с цитированием
  #11  
Старый 12.04.2021, 09:54
svobodniy.agent svobodniy.agent вне форума
Прохожий
 
Регистрация: 04.02.2021
Сообщения: 13
Версия Delphi: Delphi 10
Репутация: 10
По умолчанию

Спасибо большое) Можете пожалуйста как для чайника разжевать куда именно надо положить данный код, где обьявить процедуру и где ее вызвать?
Ответить с цитированием
  #12  
Старый 12.04.2021, 10:22
Аватар для Guaho
Guaho Guaho вне форума
Начинающий
 
Регистрация: 27.08.2017
Сообщения: 173
Версия Delphi: Delphi7
Репутация: 10
По умолчанию

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus;

type
  TForm1 = class(TForm)
    MainMenu1: TMainMenu;
    N1: TMenuItem;
    mExpToTXT: TMenuItem;
    procedure N1Click(Sender: TObject);

  private
    { Private declarations }

  public //Прописываете в секции "public", чтобы Ваша процедура была видна из других окон программы.
    procedure ExpFromGrid(g: TDBGridEh; Format: Integer; Act: Integer); // объявление процедуры (БЕЗ "TForm1."!!!)

    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.ExpFromGrid(g: TDBGridEh; Format: Integer; Act: Integer); // Сама процедура экспорта. Прописываете её тут сами. Префикс "TForm1." обязателен (это имя формы + приставка "Т", означающая класс).
begin
// Тело процедуры экспорта
end;


// Автоматически созданный обработчик. Создаёте меню "Экспорт", в нём - пункт "экспорт в ТХТ", даёте ему имя "mExpToTXTClick"
// и по клику по этому пункту меню автоматически создаётся данный обработчик.
procedure TForm1.mExpToTXTClick(Sender: TObject);
begin
  TForm1.ExpFromGrid(fg, TMenuItem(Sender).Tag, fm_param._cbAfterExport.itemIndex); // это Вы сюда прописываете.
  // Если вызываете процедуру из того же окна, где она объявлена, префикс "TForm1." необязателен. При вызове из других окон - обязателен.
end;

end.

TMenuItem(Sender).Tag - это свойство Tag того пункта меню, по которому Вы щёлкнули мышью.
fm_param._cbAfterExport.itemIndex - это на отдельной форме параметров специальный комбобокс, задающий действия после экспорта. Вместо этого можете просто вручную задавать число, определяющее эти действия (см. в моих предыдущих сообщениях саму процедуру экспорта; например, 0 - ничего не делать).

Последний раз редактировалось Guaho, 12.04.2021 в 10:31.
Ответить с цитированием
  #13  
Старый 12.04.2021, 11:43
svobodniy.agent svobodniy.agent вне форума
Прохожий
 
Регистрация: 04.02.2021
Сообщения: 13
Версия Delphi: Delphi 10
Репутация: 10
По умолчанию

Все сделал по аналогии, процедуру видит, но почему-то внутри самой процедуры много параметров: undeclared identifier.
Ответить с цитированием
  #14  
Старый 12.04.2021, 13:58
Аватар для Guaho
Guaho Guaho вне форума
Начинающий
 
Регистрация: 27.08.2017
Сообщения: 173
Версия Delphi: Delphi7
Репутация: 10
По умолчанию

Ну разумеется, так и будет, если 1:1 повторить)))
В коде экспорта есть необъявленные у Вас идентификаторы, вот компилятор и не понимает, что это такое.
sd1 - это компонент SaveDialog. Киньте на форму компонент SaveDialog и дайте ему имя "sd1".
Ну и fm_param._cbAfterExport.itemIndex заменить пока временно на число, например на 0.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 19:15.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter