代碼很簡單,主要是註冊一段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庫中自帶的函數。