目录

来源:http://trac.seagullproject.org/wiki/Plugins/DataGrid

通用的Data Grid插件

请看:source:branches/datagrid/

我们公司开发了一个Data Grid控件——我想你可能感兴趣。它很强大而且易于使用。 我们把代码移到SVN分支。

有一些关于它的文档和实例。

DataGrid类使得快速编程产生具有强大特性的列表有了可能。使用这个类应用程序中的所有DataGrid可以有一样的外观和行为,而且可容易地增加新的特性。DataGrid?是用MVC标准集成的。

Demo (实例演示)

http://www.varico.poznan.pl/beta/DataGrid/seagull/www/index.php/tools/DataGrid/

特性

        o id: DataGrid的id, 用来惟一标识被选中的行。它可设置成不可见, 使用JavaScript选择行?
        o text: text (左对齐)
        o html: HTML (左对齐)
        o user: 程序员可自己设置列的属性(如:对刘方式,颜色等)
        o colour: 这各类型的列会用数据的颜色来着色
        o integer: 整数(右对齐)
        o real: 实数 (右对齐)
        o date: 日期字段 (右对齐)
        o hour: 时间字段 (居中对齐)
        o image: 来自文件的图片 (居中对齐)
        o thumbnail: 文件的缩略图 (居中对齐)
        o enclosure: 附件,带文件类型图标 (居中对齐)
        o mail: 用来发送e-mail的e-mail地址(左对齐)
        o action: 在这里定义基于行的数据操作 (如,编辑,删除按钮等)

Programming

        o DataGrid主要对象: actions dispatching, 列和数据源管理
        o Column 对象(DataGrid中的每一列都被视为一个对象), 可更改列的属性,类型等。
        o DataSource 对象(基于行的): 排序,过滤和页面导航功能

实例

简易DataGrid, 手工填充数据

<?php

      require_once SGL_LIB_DIR . '/SGL/DataGrid.php';
      require_once SGL_LIB_DIR . '/SGL/DataSource.php';
      //创建新的 dataGrid
      $dataGrid = & new SGL_DataGrid('one');
      //添加列到 dataGrid
      $col = &$dataGrid->addColumn(array(
                      'type' => 'text',
                      'name' => 'name',
                      'dbName' => 'name',
                      'filterable' => true,
                      'sortable' => true
                    ));
      $col->setTransformInColumn(array('Adamus' => 'ad'));
      $col2 = &$dataGrid->addColumn(array(
                      'type' => 'text',
                      'name' => 'surname',
                      'dbName' => 'surname',
                      'filterable' => true,
                      'sortable' => true
                    ));
      $col2->setTransformInColumn(array('Mielcarus' => 'mtest'));
      $dataGrid->addColumn(array(
                  'type' => 'text',
                  'name' => 'city',
                  'dbName' => 'city',
                  'filterable' => true,
                  'sortable' => true
                ));
      $dataGrid->addColumn(array(
                  'type' => 'integer',
                  'name' => 'age',
                  'dbName' => 'age',
                  'filterable' => true,
                  'sortable' => true,
                  'avgTotalable' => true,
                  'avgable' => true
                ));
      //创建数据源实例
      $dataSource = & new SGL_DataGridDataSource();
      //手工添加数据到数据源
      $dataSource->addRow(array
          ('name' => 'Adamus', 'surname' => 'Mielcarus', 'city' => 'Olimp', 'age' => 33));
      $dataSource->addRow(array
          ('name' => 'Grzegorzus', 'surname' => 'Dabrawus', 'city' => 'Sparta', 'age' => 21));
      $dataSource->addRow(array
          ('name' => 'Robertus', 'surname' => 'Borkowus', 'city' => 'Ateny', 'age' => 22));
      $dataSource->addRow(array
          ('name' => 'Piotrus', 'surname' => 'Skrzypus', 'city' => 'Troja', 'age' => 24));
      $dataSource->addRow(array
          ('name' => 'Tomaszus', 'surname' => 'Przybyszus', 'city' => 'Saloniki', 'age' => 25));
  
      //获取全部数据并绑定或填充到,dataGrid并显示
      $dataGrid->validate($input->inputReq);
      $dataGrid->setDataSource($dataSource);
      $dataGrid->display($output);

?>

使用SQL数据填充 DataGrid

<?php

      require_once SGL_LIB_DIR . '/SGL/DataGrid.php';
      require_once SGL_LIB_DIR . '/SGL/SQLDataSource.php';
      $dataGrid = & new SGL_DataGrid('two');
      $dataGrid->addColumn(array(
                  'type' => 'id',
                  'name' => 'id',
                  'dbName' => 'id',
                ));
      $dataGrid->addColumn(array(
                  'type' => 'text',
                  'name' => 'name',
                  'dbName' => 'name',
                  'filterable' => true,
                  'sortable' => true
                ));
      $dataGrid->addColumn(array(
                  'type' => 'text',
                  'name' => 'description',
                  'dbName' => 'description',
                  'filterable' => true,
                  'sortable' => true
                ));
      $dataGrid->addColumn(array(
                  'type' => 'real',
                  'name' => 'salary',
                  'dbName' => 'salary',
                  'filterable' => true,
                  'sortable' => true,
                  'sumable' => true,
                  'sumTotalable' => true
                ));
      $dataGrid->addColumn(array(
                  'type' => 'enclosure',
                  'name' => 'file',
                  'dbName' => 'fileattached',
                ));
      $dataGrid->addColumn(array(
                  'type' => 'image',
                  'name' => 'picture',
                  'dbName' => 'picture',
                ));
      $dataSource = & new SGL_DataGridSQLDataSource("
          SELECT id, name, description, salary, fileattached, picture
          FROM people WHERE #_FILTER#
      ", 'id');
      $dataGrid->validate($input->inputReq);
      $dataGrid->setDataSource($dataSource);
      $dataGrid->display($output);

?>

一个页面使用两个DataGrid

<?php

      require_once SGL_LIB_DIR . '/SGL/DataGrid.php';
      require_once SGL_LIB_DIR . '/SGL/SQLDataSource.php';
      $dataGrid = & new SGL_DataGrid('three');
      $dataGrid->dataGridHeader = 'Sample title';
      $dataGrid->addColumn(array(
                  'type' => 'user',
                  'name' => 'name',
                  'dbName' => 'name',
                  'filterable' => true,
                  'sortable' => true
                ));
      $dataGrid->addColumn(array(
                  'type' => 'colour',
                  'name' => 'colour column',
                  'dbName' => 'colour',
                  'filterable' => true,
                  'sortable' => true
                ));
      $dataGrid->addColumn(array(
                  'type' => 'email',
                  'name' => 'email',
                  'dbName' => 'email',
                  'filterable' => true,
                  'sortable' => true
                ));
      $dataGrid->addColumn(array(
                  'type' => 'link',
                  'name' => 'www',
                  'dbName' => 'www',
                  'filterable' => true,
                  'sortable' => true
                ));
      $dataSource = & new SGL_DataGridSQLDataSource("
          SELECT name, birthdate, colour, email, www
          FROM people WHERE #_FILTER#
          ORDER BY name
      ", 'id');
      $dataGrid->validate($input->inputReq);
      $dataGrid->setDataSource($dataSource);
      $dataGrid->display($output);
      $dataGrid2 = & new SGL_DataGrid('four');
      $dataGrid2->emptyTitle     = 'DataGrid with no data - only special title for this situation is shown';
      $dataGrid2->addColumn(array(
                  'type' => 'id',
                  'name' => 'id',
                  'dbName' => 'id'
                ));
      $col = &$dataGrid2->addColumn(array(
                  'type' => 'text',
                  'name' => 'name',
                  'dbName' => 'name',
                  'filterable' => true,
                  'sortable' => true
                ));
      $col->setFilterSelect(array('Jan', 'Andrew', 'Stephen'));
      $dataGrid2->addColumn(array(
                  'type' => 'text',
                  'name' => 'surname',
                  'dbName' => 'surname',
                  'filterable' => true,
                  'sortable' => true
                ));
      $dataGrid2->addColumn(array(
                  'type' => 'date',
                  'name' => 'birth date',
                  'dbName' => 'birthdate',
                  'filterable' => true,
                  'sortable' => true
                ));
      $dataGrid2->addColumn(array(
                  'type' => 'real',
                  'name' => 'salary',
                  'dbName' => 'salary',
                  'filterable' => true,
                  'sortable' => true,
                  'sumable' => true,
                  'sumTotalable' => true
                ));
      $dataSource2 = & new SGL_DataGridSQLDataSource("
          SELECT id, name, surname, birthdate, salary
          FROM people WHERE #_FILTER# AND 1=0
          ORDER BY id
      ", 'id');
      $dataGrid2->validate($input->inputReq);
      $dataGrid2->setDataSource($dataSource2);
      $dataGrid2->display($output);

?>

反馈信息

Hiya Krzysztof(人名)

它是关于datagrid的伟大成就,看起来比以前简洁了,我想它确实是集成了。下面是我的一些评论:

API

文件结构
     /lib/SGL/DataGrid.php /lib/SGL/DataGrid/Column.php /lib/SGL/DataGrid/DataSource.php ... etc
ok

<?php $dataGrid→addColumn('text', 'name', 'name', true, true); ?>

better

<?php $dataGrid→addColumn(

     array('type' => 'text', 
           'label' => 'name', 
           'fieldName' => 'name');
           // etc

?>

    <?php
    $dataGrid->addAction(
           array('label' => 'Delete', 
                 'module' => 'foo', 
                 'manager' => 'bar'),
                 'action' => 'baz'),
                 'id' => {id}),
                 'name' => {name});
                 // or something similar
    ?>

代码

General

DemianTurner /27.10.2005 10:32/

变化和改进

Hi Demian,

感谢你的建议。

我们做了一些代码和API修改,像:

我们添加了新的功能, 如: