本篇将讲述如何解决GridView控件中使用CheckBox控件无法保存状态问题。由于我们开发的CheckBox控件在GridView控件的外部使用时可以保存状态,所以我的解决方案是:另外开发一个控件,用来保存在GridView控件中的CheckBox控件的状态。我将其命名为CheckBoxHidden控件。控件代码如下:
同时,应修改第一篇的CheckBox.js文件,增加如下两个函数:
1
using System;
2
using System.Web.UI;
3
using System.Web.UI.WebControls;
4
5
namespace HughLin.Web.UI.WebControls
6
{
7
public class CheckBoxHidden : System.Web.UI.WebControls.HiddenField
8
{
9
/// <summary>
10
/// 获取或设置控件所在的组名称
11
/// </summary>
12
public string Group
13
{
14
get
15
{
16
object obj1 = this.ViewState["Group"];
17
return (obj1 == null) ? string.Empty : (string)obj1;
18
}
19
set
20
{
21
this.ViewState["Group"] = value;
22
}
23
}
24
25
protected override void OnPreRender(EventArgs e)
26
{
27
if (this.Visible && !string.IsNullOrEmpty(this.Group))
28
{
29
if (!this.Page.ClientScript.IsClientScriptIncludeRegistered(typeof(CheckBox), "HughLin.CheckBox.js"))
30
{
31
this.Page.ClientScript.RegisterClientScriptResource(typeof(CheckBox), "HughLin.CheckBox.js");
32
}
33
if (!this.Page.ClientScript.IsOnSubmitStatementRegistered(typeof(CheckBox), "HughLin.CheckBox.js"))
34
{
35
this.Page.ClientScript.RegisterOnSubmitStatement(typeof(CheckBox), "HughLin.CheckBox.js", "AspNetV2_SaveCheckBoxGroupValue('" + this.Group + "', '" + this.ClientID + "')");
36
}
37
if (!this.Page.ClientScript.IsStartupScriptRegistered(typeof(CheckBox), "HughLin.CheckBox.js"))
38
{
39
this.Page.ClientScript.RegisterStartupScript(typeof(CheckBox), "HughLin.CheckBox.js", "\r\n<script language='javascript'>\nAspNetV2_RestoreCheckBoxGroupValue('" + this.Group + "', '" + this.ClientID + "');\n</script>\n");
40
}
41
}
42
base.OnPreRender(e);
43
}
44
}
45
}
using System;2
using System.Web.UI;3
using System.Web.UI.WebControls;4

5
namespace HughLin.Web.UI.WebControls6
{7
public class CheckBoxHidden : System.Web.UI.WebControls.HiddenField8
{9
/// <summary>10
/// 获取或设置控件所在的组名称11
/// </summary>12
public string Group13
{14
get15
{16
object obj1 = this.ViewState["Group"];17
return (obj1 == null) ? string.Empty : (string)obj1;18
}19
set20
{21
this.ViewState["Group"] = value;22
}23
}24

25
protected override void OnPreRender(EventArgs e)26
{27
if (this.Visible && !string.IsNullOrEmpty(this.Group))28
{29
if (!this.Page.ClientScript.IsClientScriptIncludeRegistered(typeof(CheckBox), "HughLin.CheckBox.js"))30
{31
this.Page.ClientScript.RegisterClientScriptResource(typeof(CheckBox), "HughLin.CheckBox.js");32
}33
if (!this.Page.ClientScript.IsOnSubmitStatementRegistered(typeof(CheckBox), "HughLin.CheckBox.js"))34
{35
this.Page.ClientScript.RegisterOnSubmitStatement(typeof(CheckBox), "HughLin.CheckBox.js", "AspNetV2_SaveCheckBoxGroupValue('" + this.Group + "', '" + this.ClientID + "')");36
}37
if (!this.Page.ClientScript.IsStartupScriptRegistered(typeof(CheckBox), "HughLin.CheckBox.js"))38
{39
this.Page.ClientScript.RegisterStartupScript(typeof(CheckBox), "HughLin.CheckBox.js", "\r\n<script language='javascript'>\nAspNetV2_RestoreCheckBoxGroupValue('" + this.Group + "', '" + this.ClientID + "');\n</script>\n");40
}41
}42
base.OnPreRender(e);43
}44
}45
} 1
function AspNetV2_RestoreCheckBoxGroupValue(group, clientId)
2
{
3
var objArray;
4
try
5
{
6
objArray = eval(group);
7
}
8
catch (e)
9
{
10
return;
11
}
12
if (objArray == null || objArray.length == 0)
13
{
14
return;
15
}
16
var flag = false;
17
var objArray2 = document.getElementById(clientId);
18
if (objArray2 == null || objArray2.value.length == 0)
19
{
20
flag = true;
21
}
22
if (flag)
23
{
24
for (var i = 0; i < objArray.length; i++)
25
{
26
var e = objArray[i];
27
e.checked = false;
28
}
29
}
30
else
31
{
32
var objArray3 = objArray2.value.split(",");
33
for (var i = 0; i < objArray.length; i++)
34
{
35
var e = objArray[i];
36
var flag1 = (objArray3[i].toLowerCase() == "true") ? true : false;
37
e.checked = flag1;
38
}
39
}
40
}
41
42
function AspNetV2_SaveCheckBoxGroupValue(group, clientId)
43
{
44
var objArray;
45
try
46
{
47
objArray = eval(group);
48
}
49
catch (e)
50
{
51
return;
52
}
53
if (objArray == null || objArray.length == 0)
54
{
55
return;
56
}
57
var objValues = objArray[0].checked;
58
for (var i = 1; i < objArray.length; i++)
59
{
60
var e = objArray[i];
61
objValues += "," + objArray[i].checked;
62
}
63
document.getElementById(clientId).value = objValues;
64
}
function AspNetV2_RestoreCheckBoxGroupValue(group, clientId)2
{3
var objArray;4
try5
{6
objArray = eval(group);7
}8
catch (e)9
{10
return;11
}12
if (objArray == null || objArray.length == 0)13
{14
return;15
}16
var flag = false;17
var objArray2 = document.getElementById(clientId);18
if (objArray2 == null || objArray2.value.length == 0)19
{20
flag = true;21
}22
if (flag)23
{24
for (var i = 0; i < objArray.length; i++)25
{26
var e = objArray[i];27
e.checked = false;28
}29
}30
else31
{32
var objArray3 = objArray2.value.split(",");33
for (var i = 0; i < objArray.length; i++)34
{35
var e = objArray[i];36
var flag1 = (objArray3[i].toLowerCase() == "true") ? true : false;37
e.checked = flag1;38
}39
}40
}41

42
function AspNetV2_SaveCheckBoxGroupValue(group, clientId)43
{44
var objArray;45
try46
{47
objArray = eval(group);48
}49
catch (e)50
{51
return;52
}53
if (objArray == null || objArray.length == 0)54
{55
return;56
}57
var objValues = objArray[0].checked;58
for (var i = 1; i < objArray.length; i++)59
{60
var e = objArray[i];61
objValues += "," + objArray[i].checked;62
}63
document.getElementById(clientId).value = objValues;64
} 同样我们将其编译到HughLin.dll中。
使用是我们只需要在第二篇中的代码中加入:
<hlAsp:CheckBoxHidden ID="CheckBoxHidden1" runat="server" Group="UserCheckBoxGroup1" />
注意:Group应当和你的CheckBox控件的Group要相同。
本系列中开发的CheckBox控件有一个好处就是:可以同时在多个GridView中使用,而互相不会干扰,只需设置Group的值不同即可。当然要保存多个GridView的CheckBox控件的状态,必须添加相应的ChekBoxHidden控件。


浙公网安备 33010602011771号