ComponentArt Grid检验栏列
介绍
就象大多数数据表格控件,ComponentArt Grid包括扩展的在表格列中操作检验栏的功能,
这种功能可以用于列属性设置为"CheckBox"的boolean列.这本质上是将列永久的设置为编辑模式,允许开发者响应列的变化,在checkboxes获得似乎更多的信息.注意,这些功能的一部分能够有选择的被服务器端模板执行
可选的数据绑定
Checkbox类型的表格列能够被绑定到使用通常GridColumn.DataField属性的数据源的字段 。被绑定的字段应该是boolean类型。如果这样做,checkbox会预装字段中的数据
如果数据字段没有被指定,GridColumn中的值默认为false,但checkbox和支持的事件和方法同样使用
使用ItemCheckChanged事件
在服务器端响应checkbox改变的主要方法是ItemCheckChanged事件.一旦一个postback发生,这个事件就对每一个发生在客户端的改变回环到服务器激发。ItemCheckChanged就这样实现数据库与用户在checkbox列的操作同步
使用ItemCheckChanged,我们首先需要一个正确类型的列,例如:
<ComponentArt:Grid runat="server" ID="Grid1" ... >
<Levels>
<ComponentArt:GridLevel ... >
<Columns>
...
<ComponentArt:GridColumn DataField="Active" DataType="System.Boolean" ColumnType="CheckBox" ... />
</Columns>
</ComponentArt:GridLevel>
</Levels>
</ComponentArt:Grid>
上例定义了一个checkbox列,与数据字段("Active")关联。注意:这是可选择的,一个checkbox列可以是独立的,可以不明确的连接到数据源的字段
接下来,我们需要在服务器端定义事件委托:
private void Grid1_CheckChanged
(object sender, ComponentArt.Web.UI.GridItemCheckChangedEventArgs args)
{
Response.Write("Item " + args["Title"] + " checkbox set to " + args.Checked + " under column " + args.Column.DataField + "<br />"n");
}
最后,连接到事件处理
private void InitializeComponent()
{
...
Grid1.ItemCheckChanged += new ComponentArt.Web.UI.Grid.ItemCheckChangedEventHandler(Grid1_CheckChanged);
}
在这一点,我们的事件委托会被每一种checkbox变化模式调用。事件会在每一次回环成批量的调用。可选的,我们能够强迫表格在每次checkbox变化时进行回传,既设置表格的AutoPostBackOnCheckChanged属性为true.
使用GetCheckedItems方法
另外一个管理checkboxes的方法是使用服务器端的Grid.GetCheckedItems方法,这种方式将GridColumn作为单独的参数,返回一个在给定列是被选的的行集合。他可以随时调用,让开发者在事件委托之外自由的获得checkbox的信息
下面是使用GetCheckedItems的例子:
GridItemCollection activeItems = Grid1.GetCheckedItems(Grid1.Levels[0].Columns["Active"]);
foreach(GridItem activeItem in activeItems)
{
Response.Write("Item " + activeItem["ID"] + " is active.<br />"n");
}
有用的提示
没有和Grid整合的设想是为了更容易的使用表格强有力的服务器端和客户端接口来添加到表格控件中。下面是个例子:
客户端方法:
function GetCheckedItems(grid, columnNumber)
{
var checkedItems = new Array();
var gridItem;
var itemIndex = 0;
while(gridItem = grid.Table.GetRow(itemIndex))
{
if(gridItem.Cells[columnNumber].Value)
{
checkedItems[checkedItems.length] = gridItem;
}
itemIndex++;
}
return checkedItems;
}
客户端 CheckAll方法
使用客户端Grid编程接口,我们能够很容易的写代码来遍历表格每一行,设施每个checkbox列的元素的值为true,下面是可以重用的代码:
function CheckAllItems(grid, columnNumber)
{
var gridItem;
var itemIndex = 0;
while(gridItem = grid.Table.GetRow(itemIndex))
{
gridItem.SetValue(columnNumber, true);
itemIndex++;
}
grid.Render();
}
注意:如果我们改变true为false,相同的方法不会检查所有的列中的checkboxe。要找一个更通用的方法来做到这两种情况,我们必须通过附加的boolean类型的参数