来源:http://trac.seagullproject.org/wiki/Plugins/DataGrid
我们公司开发了一个Data Grid控件——我想你可能感兴趣。它很强大而且易于使用。 我们把代码移到SVN分支。
有一些关于它的文档和实例。
DataGrid类使得快速编程产生具有强大特性的列表有了可能。使用这个类应用程序中的所有DataGrid可以有一样的外观和行为,而且可容易地增加新的特性。DataGrid?是用MVC标准集成的。
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: 在这里定义基于行的数据操作 (如,编辑,删除按钮等)
o DataGrid主要对象: actions dispatching, 列和数据源管理
o Column 对象(DataGrid中的每一列都被视为一个对象), 可更改列的属性,类型等。
o DataSource 对象(基于行的): 排序,过滤和页面导航功能
<?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);
?>
<?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);
?>
<?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的伟大成就,看起来比以前简洁了,我想它确实是集成了。下面是我的一些评论:
/lib/SGL/DataGrid.php /lib/SGL/DataGrid/Column.php /lib/SGL/DataGrid/DataSource.php ... etc
<?php $dataGrid→addColumn('text', 'name', 'name', true, true); ?>
<?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
?>
DemianTurner /27.10.2005 10:32/
Hi Demian,
感谢你的建议。
我们做了一些代码和API修改,像:
我们添加了新的功能, 如: