Табличный контрол (Grid) для замены стандартного табличного контрола (Grid). (сортировка, фильтрация, печать, поиск, експорт в Excell, OpenOffice и т.д.)

Табличный контрол (Grid) для замены стандартного табличного контрола (Grid). (сортировка, фильтрация, печать, поиск, експорт в Excell, OpenOffice и т.д.) Возможности: Сортировка (убывание/увеличение) фильтрация (быстрая через хидер/ или через отдельное окно) поиск заморозка столбцов Автоматическая печать (автоматом генерится frx-файл) Експорт в OpenOffice, Excell, formulaone (советую ее, ракета!!!) Настройка столбцов (ширина, спрятать) Поддержка многоязычности (Украинский, Росийский, Английский) Итоговые данные (Сумма, количество записей) Простота использования и настройки для програмиста (это стандартный Grid Foxpro).

Табличный контрол (Grid) для замены стандартного табличного контрола (Grid). (сортировка, фильтрация, печать, поиск, експорт в Excell, OpenOffice и т.д.) версия 1.1
(исправлена ошибка для некоторых разрешений экрана с высотой нижнего грида, показал Дима Григорьев)

Возможности:

Сортировка (убывание/увеличение)
фильтрация (быстрая через хидер/ или через отдельное окно)
поиск
заморозка столбцов
Автоматическая печать (автоматом генерится frx-файл)
Експорт в OpenOffice, Excell, formulaone (советую ее, ракета!!!)
Настройка столбцов (ширина, спрятать)
Поддержка многоязычности (Украинский, Росийский, Английский)
Итоговые данные (Сумма, количество записей)
Простота использования и настройки для програмиста (это стандартный Grid Foxpro).
“Резиновость” колонок (Anchor)

Как это работает.
Это стандартный Grid Foxpro, для работы достаточно положить его на форму, настраивать его как стандартный Grid. Можно делать несколько контроллов в ячейках.
Во время запуска форми (int контрола), он уничтожает свой хидер и на его основе делает контейнера, которые по настройках дублируют стандартные хидера, после этого синхронизирует нижный грид (итоговые суммы). Когда Вы пробуете сортировать, контролл проверяет на наличие интекса по этому полю, если он есть то использует его, если его нет, то индексирует таблицу (курсор). Все операции индексирования, фильтрации, и т.д.
находятся в конструкциях try.

Пример настройки

  thisform.addproperty('grid1')  
  thisform.grid1 = thisform.targrid1.dataGrid  
  thisform.grid1.RecordSource =''  
 *targrid1 - это контейнер  
 * дальше нужно работать с thisform.grid1 - это стандартный контролл фокспро.  
    
  USE tovar.dbf  
  select tovar  
  THISFORM.grid1.RecordSource = 'tovar'  
  THISFORM.grid1.column1.ControlSource = 'tovar.nametv'  
  THISFORM.grid1.column2.ControlSource = 'tovar.ov'  
  THISFORM.grid1.column3.ControlSource = 'tovar.zal'  
  THISFORM.grid1.column4.ControlSource = 'tovar.cena_r'  
  THISFORM.grid1.column5.ControlSource = 'tovar.sumall'  
  THISFORM.grid1.column6.ControlSource = 'tovar.codetvun'  
  THISFORM.grid1.column7.ControlSource = 'tovar.namegr2'  

Есть много возможностей (часть из них будем описывать позднее):

1. автоматом вывести итоговую сумму в колонку которая имеет название column5.
thisform.targrid1.showsumacolumn('column5')

2. спрятать колонку так чтобы пользователь ее не мог никак увидеть, например цена товара для кладовщика.
thisform.targrid1.showcolumn('column5',.f.)
.f. - спрятать
.t. - показать

Если сделать
thisform.targrid1.dataGrid.column5.visible=.f.
то колонку будет не видно, но пользователь через окно натройки сможет ее отобразить.

3. Стартовий фильтр. Если нужно чтобы на таблицу был наложен такой фильтр, для того чтобы пользователь его
не видел и не мог снять, есть свойсто
thisform.targrid1.setglobalfilter('sumall<1000')
Пользователь сможет настраивать свои фильтры, но об этом стартовом и знать не будет.

узнать какой стартовый фильтр
wait window thisform.targrid1.startfilter

4. Текст который будет печататься сверху и снизу отчета (frx автоматом генерится на основе Grid). Например нужно знать фамилию того кто это напечатал.
thisform.targrid1.reportnameoperator='напечатал Пупкин'
thisform.targrid1.reporttextsummary=' напечатоно с компьютера Petya'

5. Запрет печатать Grid и экспортировать его куда-нибуть. Например, кладовщик должен видеть но ему нельзя печатать эти данные.
thisform.targrid1.nodruk=.t.

6. Папка куда котрол ложит мусор (индексы, отчеты). Контрол автоматически мусор убирает за собой.
thisform.targrid1.fpathtemp='c:temp'

7. Запрет автоматического растяжения контрола (по умолчанию он резиновый).
thisform.targrid1.noresize=.t.

8. Метод. Напечатать котрол.
thisform.targrid1.doreport()

9. Метод. Експортировать в Ексель/ОпенОфис
thisform.targrid1.export_to_excel()
thisform.targrid1.export_to_ooo()

10. Методы для удобства. BindEvent'ом связаны с соответствующими методати контролов в ячейках Grid. Например в Grid есть 10 колонок и в них есть TexBox, когда нужно чтобы по ondblclick в любой колонке Grid запускалась какая-то форма, то чтобы не писать код в 10 колонках пишем код в одном методе thisform.targrid1.ondblclick.

thisform.targrid1.ondblclick()
thisform.targrid1.onkeypress()
thisform.targrid1.onmousedown()
thisform.targrid1.onrightclick()

11. Если Вы програмно изменяете Grid или в конце оформления, то потом нужно выполнить thisform.targrid1.dataGrid.refresh
Он автоматом, построит Хидер колонки и итоговые данные. Это комманда обязательная!!!

12. Запрет выводить итоговую сумму по колонке. Например кладовщики должны видеть суммы накладных, но на какую сумму они сегодня отгрузили всего товаров нельзя.
thisform.grid1.column4.noshowsuma = .t.
Я понимаю что кладовщики могут вручную сложить все накладные :). Но автоматически возможность видеть итоговую сумму будет недоступна.

13. Сбросить все фильтры (кроме стартового!!!) и сортировки, уничтожить индексы. Делает внешний вид контролла как по умолчанию.
thisform.targrid1.rebuildall()

14. Изменть язык контролла.
thisform.targrid1.languageload(1)
*m.pnLanguageId=1 &&English
*m.pnLanguageId=2 &&Russian
m.pnLanguageId=3 &&Ukraine

15. Автоматическая убока мусора.
После комманды
THISFORM.grid1.RecordSource='tovar2'
для прошлой таблицы tovar будут удалеы индексы которые сам котролл создал. Если таблица имела какойто индекс до использования в контролле, то он остается.Повторюсь. Удаляются только созданные им индексы.

16.“Резиновость” колонок (Anchor). По умолчанию выключен. Для включения нужно: thisform.targrid1.noResize =.t.
Напоследок.
Это обычный Grid.

Если таблица большая (широкая), то он НЕ УМЕЕТ ее резать, для этого мы позднее внедрим решение Александра Юдина (Девкон Измаил 2011).

Я понимаю что это контейнер с двумя гридами внутри (базовый и итоговые данные) и ничего умного там нет. У каждого програмиста уже есть такие контроллы.
Это мы делали 7-8 лет назад, после того как увидели Devexpress Grid ActiveX. Он круче нашего, в нем есть групировка, но он очень тормознутый. А также примера Алексея Климова, у него есть тоже классный грид, советю его посмотреть. Кроме грида у него много чего было интересного.
Особая признательность сайту www.foxclub.ru.

С ошибками и предложениями пишите на
alextretij(с_o__б_a_к_а)mail(т_o_ч_к_a)ru
Третьяков Александр / Будзяк Тарас.

Автор: alextretij
0

Автор публикации

не в сети 18 лет

alextretij

0
Комментарии: 0Публикации: 1Регистрация: 03-01-2006
Вложенные файлы
#
Тип файла
Размер
Название
1 .zip 1,39 МБ 674targrid
Оставить комментарий
Авторизация
*
*
Генерация пароля