今天做一个UltralWebGrid的全选功能,差点没有把我逼疯
本以为几分钟的事情,结果花了两个小时。
起初我的写法如下:
function SelectAllRows(gridId)
{
var grid = igtbl_getGridById(gridId);
if(grid)
{
if(grid.Rows.length > 0)
{
for(var i=0;i<grid.Rows.length;i++)
{
var item = grid.Rows.rows[i];//这里老是说有问题,经常跑到i=7,或者8以上就取不到值了。
item.setSelected(true);
}
}
}
}
于是我在百般无赖的情况下使用了另一个方法去替换这个方法,居然成功了。
function SelectAllRows(gridId)
{
var grid = igtbl_getGridById(gridId);
if(grid)
{
if(grid.Rows.length > 0)
{
for(var i=0;i<grid.Rows.length;i++)
{
var item = grid.Rows.getRow(i);//非要这么写法才行。这破封装,这样的OO设计不如不设计
item.setSelected(true);
}
}
}
}
最终的版本。
用checkbox做的,点击checkbox变全选,点击之后变成反选
function SelectAllRows(gridId,checkId)
{
var grid = igtbl_getGridById(gridId);
document.getElementById(checkId).checked=document.getElementById(checkId).checked;//这一句必不可少
if(document.getElementById(checkId).checked)
{
document.getElementById(checkId).nextSibling.innerText="反选";
}
else
{
document.getElementById(checkId).nextSibling.innerText="全选";
}
if(grid)
{
if(grid.Rows.length > 0)
{
for(var i=0;i<grid.Rows.length;i++)
{
var item = grid.Rows.getRow(i);
item.setSelected(document.getElementById(checkId).checked);
}
}
}
return false;
}
以下是全部服务器代码
UltraGridColumn ugc = new Infragistics.WebUI.UltraWebGrid.UltraGridColumn("全选", "<input id='checkbox" + this.ClientID.ToString() + "' type='checkbox' οnclick='SelectAllRows(/"" + this.ClientID.ToString() + "/",/"checkbox" + this.ClientID.ToString() + "/");'/><span>全选</span>", ColumnType.NotSet, " ");
ugc.Width = Unit.Pixel(50);
ugc.Header.Fixed = true;
ugc.CellStyle.HorizontalAlign = HorizontalAlign.Center;
ugc.Header.Style.HorizontalAlign = HorizontalAlign.Center;
ugc.AllowRowFiltering = false;
ugc.Header.ClickAction = HeaderClickAction.Select;
ugc.Header.Title = "全选/反选";
ugc.AllowUpdate = AllowUpdate.No;
this.Rows.Band.Columns.Insert(1, ugc);