在Asp.Net 2.0中新增的控件GridView可能是我们使用最普通的控件了,其用来显示数据的能力的确好用。GirdView内置有新增,修改,删除功能,结合ObjectDataSource控件,可以生成很好的三层体系的程序。但美中不足的就是其只支持单数据的操作,对于新增和修改而言倒还可以,但对于删除就不够了。我们往往希望能先选中我们要删除的记录,然后一次性删除,不仅方便而且提高了效率。
为此,我们需要有能实现“全选/全不选”的CheckBox控件来配合GridView控件,以达到我们要实现的目的。
“全选/全不选”的CheckBox控件程序代码如下:
CheckBox.js文件代码如下:
要使代码能够编译成功,必须在AssemblyInfo.cs文件中配置js文件的引用
using System.Web.UI;
[assembly: WebResource("HughLin.CheckBox.js", "application/x-javascript")]
编译后生成 HughLin.dll
下一篇将讲解如何使用该CheckBox控件实现删除GridView控件的多条记录
为此,我们需要有能实现“全选/全不选”的CheckBox控件来配合GridView控件,以达到我们要实现的目的。
“全选/全不选”的CheckBox控件程序代码如下:
1
using System;
2
using System.Collections.Specialized;
3
using System.Web;
4
using System.Web.UI;
5
using System.Web.UI.WebControls;
6
7
namespace HughLin.Web.UI.WebControls
8
{
9
/// <summary>
10
/// 可全选/全不选复选框控件
11
/// </summary>
12
public class CheckBox : System.Web.UI.WebControls.CheckBox
13
{
14
public CheckBox()
15
{
16
}
17
18
/// <summary>
19
/// 获取或设置被绑定的数据
20
/// </summary>
21
public string BindedValue
22
{
23
get
24
{
25
object obj1 = this.ViewState["BindedValue"];
26
return (obj1 == null) ? string.Empty : (string)obj1;
27
}
28
set
29
{
30
if (!string.IsNullOrEmpty(value))
31
{
32
this.ViewState["BindedValue"] = value;
33
}
34
}
35
}
36
37
/// <summary>
38
/// 获取或设置控件所在的组名称
39
/// </summary>
40
public string Group
41
{
42
get
43
{
44
object obj1 = this.ViewState["Group"];
45
return (obj1 == null) ? string.Empty : (string)obj1;
46
}
47
set
48
{
49
this.ViewState["Group"] = value;
50
}
51
}
52
53
/// <summary>
54
/// 获取或设置一个值,该值标识控件是否为父级别
55
/// </summary>
56
public bool IsParent
57
{
58
get
59
{
60
object obj1 = this.ViewState["IsParent"];
61
return (obj1 == null) ? false : (bool)obj1;
62
}
63
set
64
{
65
this.ViewState["IsParent"] = value;
66
}
67
}
68
69
protected override void OnPreRender(EventArgs e)
70
{
71
if (this.Visible && this.Enabled && !string.IsNullOrEmpty(this.Group))
72
{
73
if (!this.Page.ClientScript.IsClientScriptIncludeRegistered(typeof(CheckBox), "HughLin.CheckBox.js"))
74
{
75
this.Page.ClientScript.RegisterClientScriptResource(typeof(CheckBox), "HughLin.CheckBox.js");
76
}
77
string text1 = "document.getElementById(\"" + this.ClientID + "\")";
78
this.Page.ClientScript.RegisterArrayDeclaration(this.Group, text1);
79
}
80
base.OnPreRender(e);
81
}
82
83
protected override void Render(HtmlTextWriter writer)
84
{
85
if (this.Enabled && this.Visible && !string.IsNullOrEmpty(this.Group))
86
{
87
if (!string.IsNullOrEmpty(this.BindedValue))
88
{
89
writer.AddAttribute("value", this.BindedValue);
90
}
91
writer.AddAttribute("isparent", this.IsParent.ToString());
92
writer.AddAttribute(HtmlTextWriterAttribute.Onclick, "javascript:AspNetV2_Check(this, '" + this.Group + "');");
93
}
94
base.Render(writer);
95
}
96
}
97
}

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

CheckBox.js文件代码如下:
1
function AspNetV2_Check(item, group)
2
{
3
var itemIsParent = (item.isparent.toLowerCase() == "true") ? true : false;
4
var itemChecked = item.checked;
5
var objArray;
6
try
7
{
8
objArray = eval(group);
9
}
10
catch (e)
11
{
12
return;
13
}
14
if (objArray == null || objArray.length == 0)
15
{
16
return;
17
}
18
if (itemIsParent)
19
{
20
AspNetV2_CheckAll(objArray, itemChecked);
21
}
22
else
23
{
24
AspNetV2_CheckIt(objArray, itemChecked);
25
}
26
}
27
28
function AspNetV2_CheckIt(newArray, itemChecked)
29
{
30
if (!itemChecked)
31
{
32
for (var i = 0; i < newArray.length; i++)
33
{
34
var e = newArray[i];
35
var isParent = (e.isparent.toLowerCase() == "true") ? true : false;
36
if (isParent)
37
{
38
e.checked = false;
39
}
40
}
41
}
42
else
43
{
44
var objAll;
45
var allChecked = 0;
46
for (var i = 0; i < newArray.length; i++)
47
{
48
var e = newArray[i];
49
var isParent = (e.isparent.toLowerCase() == "true") ? true : false;
50
if (e.checked && !isParent)
51
{
52
allChecked++;
53
}
54
else if (isParent)
55
{
56
objAll = e;
57
}
58
}
59
if (allChecked == newArray.length - 1)
60
{
61
objAll.checked = true;
62
}
63
}
64
}
65
66
function AspNetV2_CheckAll(newArray, itemChecked)
67
{
68
for (var i = 0; i < newArray.length; i++)
69
{
70
var e = newArray[i];
71
var isParent = (e.isparent.toLowerCase() == "true") ? true : false;
72
if (!isParent)
73
{
74
if (e.checked != itemChecked)
75
{
76
e.checked = itemChecked;
77
}
78
}
79
}
80
}
81
82
function AspNetV2_CheckHasData(group)
83
{
84
var objArray;
85
var hasData = false;
86
try
87
{
88
objArray = eval(group);
89
}
90
catch (e)
91
{
92
return hasData;
93
}
94
if (objArray == null || objArray.length == 0)
95
{
96
return hasData;
97
}
98
for (var i = 0; i < objArray.length; i++)
99
{
100
var e = objArray[i];
101
if (e.checked)
102
{
103
hasData = true;
104
break;
105
}
106
}
107
return hasData;
108
}

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

using System.Web.UI;
[assembly: WebResource("HughLin.CheckBox.js", "application/x-javascript")]
编译后生成 HughLin.dll
下一篇将讲解如何使用该CheckBox控件实现删除GridView控件的多条记录