实现无刷新闪烁二级联动下拉菜单(js实现)
先建立2个表
--父表
create table tb_parent(
--主键
ids int constraint pk_tb_parent_ids primary key,
parentName nvarchar(1000)
)
go
insert into tb_parent
select 1,'aaa'
union all
select 2,'bbb'
union all
select 3,'ccc'
go
--子表
create table tb_child(
parentId int ,
childId int ,
childName nvarchar (1000),
--parentId外键
constraint fk_tb_child_tb_parent_parentId
FOREIGN KEY (parentId)
REFERENCES tb_parent(ids)
)
go
insert into tb_child
select 1,101,'a_1'
union all
select 1,102,'a_2'
go
insert into tb_child
select 2,201,'b_1'
union all
select 2,202,'b_2'
go
insert into tb_child
select 3,301,'c_1'
union all
select 3,302,'c_2'
union all
select 3,303,'c_3'
go
再创建3个过程
--得到父表数据
create proc proc_GetparentData
as
SELECT [ids], [parentName]
FROM [tb_parent]
go
--得到子表数据
create proc proc_GetchildData
as
SELECT [parentId], [childId], [childName]
FROM [tb_child]
go
--由父id得到子表数据
create proc proc_GetchildDataBYparentId
@parentId int
as
SELECT [parentId], [childId], [childName]
FROM [tb_child]
where parentId=@parentId
go
WebForm5.aspx
1 <%@ Page language="c#" Codebehind="WebForm5.aspx.cs" AutoEventWireup="false" Inherits="webtest.WebForm5" %>
2 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
3 <HTML>
4 <HEAD>
5 <title>WebForm5</title>
6 <meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR">
7 <meta content="C#" name="CODE_LANGUAGE">
8 <meta content="JavaScript" name="vs_defaultClientScript">
9 <meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
10 </HEAD>
11 <body MS_POSITIONING="GridLayout">
12 <form id="Form1" method="post" runat="server">
13 父:<asp:dropdownlist id="DropDownList_parent" runat="server" onChange="changevalue(document.Form1.DropDownList_parent.options[document.Form1.DropDownList_parent.selectedIndex].value)"
14 Width="272px"></asp:dropdownlist>
15 <br>
16 子:<asp:dropdownlist id="DropDownList_child" runat="server" Width="272px"></asp:dropdownlist>
17 <br>
18 <asp:label id="msgLabel" runat="server" Width="416px"></asp:label>
19 <br>
20 <asp:Button id="Buttonok" runat="server" Text="click"></asp:Button></form>
21 </body>
22 </HTML>
2 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
3 <HTML>
4 <HEAD>
5 <title>WebForm5</title>
6 <meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR">
7 <meta content="C#" name="CODE_LANGUAGE">
8 <meta content="JavaScript" name="vs_defaultClientScript">
9 <meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
10 </HEAD>
11 <body MS_POSITIONING="GridLayout">
12 <form id="Form1" method="post" runat="server">
13 父:<asp:dropdownlist id="DropDownList_parent" runat="server" onChange="changevalue(document.Form1.DropDownList_parent.options[document.Form1.DropDownList_parent.selectedIndex].value)"
14 Width="272px"></asp:dropdownlist>
15 <br>
16 子:<asp:dropdownlist id="DropDownList_child" runat="server" Width="272px"></asp:dropdownlist>
17 <br>
18 <asp:label id="msgLabel" runat="server" Width="416px"></asp:label>
19 <br>
20 <asp:Button id="Buttonok" runat="server" Text="click"></asp:Button></form>
21 </body>
22 </HTML>
WebForm5.aspx.cs
1
using System;
2
using System.Collections;
3
using System.ComponentModel;
4
using System.Data;
5
using System.Data.SqlClient;
6
using System.Drawing;
7
using System.Web;
8
using System.Web.SessionState;
9
using System.Web.UI;
10
using System.Web.UI.WebControls;
11
using System.Web.UI.HtmlControls;
12
using System.Text;
13![]()
14
using Microsoft.ApplicationBlocks.Data;
15![]()
16
namespace webtest
17
{
18
public class WebForm5 : System.Web.UI.Page
19
{
20
protected System.Web.UI.WebControls.DropDownList DropDownList_parent;
21
protected System.Web.UI.WebControls.DropDownList DropDownList_child;
22
23
protected System.Web.UI.WebControls.Label msgLabel;
24
protected System.Web.UI.WebControls.Button Buttonok;
25![]()
26
readonly string conString="uid=sa;pwd=123;database=TestDataBase";
27
28
private void Page_Load(object sender, System.EventArgs e)
29
{
30
regJS();
31
Bind();
32
}
33![]()
34
private void regJS()
35
{
36
SqlDataReader rs=this.GetchildData();
37
StringBuilder sb=new StringBuilder(1000);
38![]()
39
sb.Append("<Script Language=JavaScript>");
40
sb.Append(Environment.NewLine);
41
42
sb.Append("arr=new Array();");
43
sb.Append(Environment.NewLine);
44
45
int i=0;
46
while(rs.Read())
47
{
48
sb.AppendFormat("arr[{0}]=new Array('{1}','{2}','{3}')",i,rs["parentId"],rs["childId"],rs["childName"]);
49
sb.Append(Environment.NewLine);
50
i=i+1;
51
}
52
53
if ( !rs.IsClosed )
54
{
55
rs.Close();
56
}
57![]()
58
sb.Append(Environment.NewLine);
59
sb.AppendFormat("var counts={0}",i);
60
sb.Append(Environment.NewLine);
61
sb.Append("function changevalue(parentId)");
62
sb.Append(Environment.NewLine);
63
sb.Append("{");
64
sb.Append(Environment.NewLine);
65
sb.Append("document.Form1.DropDownList_child.length = 0;");
66
sb.Append(Environment.NewLine);
67
sb.Append("var i;");
68
sb.Append(Environment.NewLine);
69
sb.Append("for(i=0; i<counts; i++)");
70
sb.Append(Environment.NewLine);
71
sb.Append("{");
72
sb.Append(Environment.NewLine);
73
sb.Append("if(arr[i][0]==parentId)");
74
sb.Append(Environment.NewLine);
75
sb.Append("{");
76
sb.Append(Environment.NewLine);
77
sb.Append("document.Form1.DropDownList_child.options[document.Form1.DropDownList_child.length]=new Option(arr[i][2],arr[i][1]);");
78
sb.Append(Environment.NewLine);
79
sb.Append("}");
80
sb.Append(Environment.NewLine);
81
sb.Append("}");
82
sb.Append(Environment.NewLine);
83
sb.Append("}");
84
sb.Append(Environment.NewLine);
85
sb.Append("</script>");
86
87
if( !Page.IsClientScriptBlockRegistered("jsScript"))
88
{
89
this.RegisterClientScriptBlock("jsScript",sb.ToString());
90
}
91
}
92![]()
93
void Bind()
94
{
95
//获得父表
96
this.DropDownList_parent.DataSource=SqlHelper.ExecuteReader(conString,CommandType.StoredProcedure,"proc_GetparentData");
97
this.DropDownList_parent.DataTextField="parentName";
98
this.DropDownList_parent.DataValueField="ids";
99
this.DropDownList_parent.DataBind();
100![]()
101
//根据父表id得子表
102
this.DropDownList_child.DataSource=GetchildData(Convert.ToInt32(this.DropDownList_parent.SelectedValue));
103
this.DropDownList_child.DataTextField="childName";
104
this.DropDownList_child.DataValueField="childId";
105
this.DropDownList_child.DataBind();
106
}
107![]()
108
/// <summary>
109
/// 得到子表数据
110
/// </summary>
111
/// <returns></returns>
112
SqlDataReader GetchildData()
113
{
114
return SqlHelper.ExecuteReader(conString,CommandType.StoredProcedure,"proc_GetchildData");
115
}
116
117
/// <summary>
118
/// 由父id得到子表数据
119
/// </summary>
120
/// <param name="parentId"></param>
121
/// <returns></returns>
122
SqlDataReader GetchildData(int parentId)
123
{
124
SqlParameter[] sqlParameter={new SqlParameter("@parentId",SqlDbType.Int)};
125
sqlParameter[0].Value=parentId;
126
return SqlHelper.ExecuteReader(conString,CommandType.StoredProcedure,"proc_GetchildDataBYparentId",sqlParameter);
127
}
128![]()
129
Web 窗体设计器生成的代码
150![]()
151
private void Buttonok_Click(object sender, System.EventArgs e)
152
{
153
this.msgLabel.Text = String.Format("选择的父数值={0},选择的子数值={1}", Request.Form.Get("DropDownList_parent"),Request.Form.Get("DropDownList_child"));
154
}
155
}
156
}
157![]()

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

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

150

151

152

153

154

155

156

157

说明:我在代码中用到了微软的数据访问块,按钮单击事件中请用Request.Form.Get方法取到下拉列表的数值
收藏与分享
RSS订阅我 什么是RSS?
东莞.net俱乐部
我的系列文章
A.Sql Server2005 Transact-SQL 新兵器学习 B.MCAD学习
C.代码阅读总结
D.ASP.NET状态管理
E.DB(数据库)
F.WAP
G.WinForm
H.Flex
希望上面提到的知识对您有所提示,同时欢迎交流和指正
作者:aierong
出处:http://www.cnblogs.com/aierong
贴子以"现状"提供且没有任何担保,同时也没有授予任何权利!
本文版权归作者所有,欢迎转载!
原创技术文章和心得,转载注明出处!这也是对原创者的尊重!