NetAdvantage的UltraWebGrid的全选控件设计
NetAdvantage的UltraWebGrid的全选控件设计 【对Infragistics.WebUI.UltraWebGrid.UltraWebGrid的某一列进行全选,当然这一列的Type是Checkbox】
代码很简单,主要是注册一段js,根据UltraWebGrid的实现特点,巧妙调用其js库。这样不要postback到Server端,避免无谓刷新。
两个主要属性是:
1.要设置的Grid的ID——ControlGridID;
2.要设置的Grid的列的索引号——CheckColumnIndex。
using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.ComponentModel;
namespace SelAllControl
{
/// <summary>
/// SelectAll 的摘要说明。
/// </summary>
[DefaultProperty('Text'),
ToolboxData('<{0}:SelectAll runat=server></{0}:SelectAll>')]
public class SelectAll : System.Web.UI.WebControls.CheckBox
{
private string m_strControlGridID;
private int m_iColIndex;
public SelectAll()
{
m_iColIndex = 0;
}
/// <summary>
/// 获取并设置需要控制的Grid的ID
/// </summary>
[Category('Appearance')]
[Description('设置需要控制的Grid的ID')]
public string ControlGridID
{
get
{
return this.m_strControlGridID;
}
set
{
this.m_strControlGridID = value;
}
}
/// <summary>
/// 获取并设置需要控制的Grid的CheckBox列的索引号
/// 默认为0
/// </summary>
[Category('Appearance')]
[Description('设置需要控制的Grid的ID')]
[DefaultValue(0)]
public int CheckColumnIndex
{
get
{
return m_iColIndex;
}
set
{
m_iColIndex = value;
}
}
private void AssignScript()
{
string strScript = 'var strGridID = ''+this.ControlGridID+''; if(null==strGridID || strGridID.length<=0){return;} try {var oGrid = o'+this.ControlGridID+'; var oRows = oGrid.Rows; var objCurState = document.getElementById(''+this.ClientID+''); var objSetValue = objCurState.checked; for(i=0;i<oRows.length;i++) { (oRows.getRow(i).getCell('+CheckColumnIndex.ToString()+')).setValue(objSetValue); }} catch(e){ return; }';
base.Attributes.Add('onClick',strScript);
}
/// <summary>
/// 将此控件呈现给指定的输出参数。
/// </summary>
/// <param name='output'> 要写出到的 HTML 编写器 </param>
protected override void Render(HtmlTextWriter output)
{
this.ID = this.ClientID;
AssignScript();
base.Render(output);
}
}
}
在注册的js中o开始的那些变量实际上是借用了UltraWebGrid本身在客户端声明的一些js变量。getRow(),getCell(),setValue()等也是其js库中自带的函数。