实现GridView控件的删除多条记录功能系列(3)

博客介绍了将内容编译到HughLin.dll中,在代码里加入特定CheckBoxHidden控件,强调Group值要和CheckBox控件的Group相同。开发的CheckBox控件可在多个GridView中使用且互不干扰,保存多GridView的CheckBox状态需添加相应ChekBoxHidden控件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    本篇将讲述如何解决GridView控件中使用CheckBox控件无法保存状态问题。由于我们开发的CheckBox控件在GridView控件的外部使用时可以保存状态,所以我的解决方案是:另外开发一个控件,用来保存在GridView控件中的CheckBox控件的状态。我将其命名为CheckBoxHidden控件。控件代码如下:
 1using System;
 2using System.Web.UI;
 3using System.Web.UI.WebControls;
 4
 5namespace 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}
    同时,应修改第一篇的CheckBox.js文件,增加如下两个函数:
 1function 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
42function 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}

    同样我们将其编译到HughLin.dll中。
    使用是我们只需要在第二篇中的代码中加入:
    <hlAsp:CheckBoxHidden ID="CheckBoxHidden1" runat="server" Group="UserCheckBoxGroup1" />
    注意:Group应当和你的CheckBox控件的Group要相同。

    本系列中开发的CheckBox控件有一个好处就是:可以同时在多个GridView中使用,而互相不会干扰,只需设置Group的值不同即可。当然要保存多个GridView的CheckBox控件的状态,必须添加相应的ChekBoxHidden控件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值