dropdownlist二级联动 的指向问题?
我做了一个二级联动,运行的时候,要的功能是做出来了.可是,当我选择第一个Dropdownlist1 的值时,第二个Dropdownlist2 所取的值永远是 其在类 的第一个值.例如: 大类有: 广东 广西
小类分别有:广州、深圳、东莞 南宁、桂林、柳州
当我选择广东的时候,无论我选深圳还是广州,提交数据后,得到的Dropdownlist2的值永远是 广州。
同理:选择广西后,无论选的是柳州,还是桂林,得到的永远是南宁。这是为什么啊?要在代码中,加入什么才能指向所指定的数据呢?
代码如下:
<%@ Import Namespace= "System.Data " %>
<%@ Import Namespace= "System.Data.OleDb " %>
<%@ import namespace= "System.IO " %>
<script language= "vb " runat= "server ">
Dim Myds As DataSet
Sub Page_Load(sender as object, e as Eventargs)
dim conn as new oledbconnection()
conn.connectionstring= "Provider=Microsoft.Jet.OLEDB.4.0; Data Source= " & server.MapPath( "../db/data.mdb ")
conn.open()
Dim strSql As String
strSql= "select * from category order by categoryid "
Dim MyoleAp As OleDbDataAdapter = New OleDbDataAdapter(strSql,conn)
Myds=New DataSet()
MyoleAp.Fill(Myds, "category ")
If (Not IsPostBack) Then
category.DataSource=Myds.Tables( "category ")
category.DataValueField= "categoryid "
category.DataTextField= "category "
category.DataBind()
category.Items.Add( new ListItem( "请选择 ", "-1 " ) )
End If
session( "selectedvalue ")=category.SelectedValue
strSql= "select * from sortsid order by sortsid "
MyoleAp.SelectCommand.CommandText=strSql
MyoleAp.Fill(Myds, "sortsid ")
sorts.DataSource=Myds.Tables( "sortsid ")
sorts.DataValueField= "sortsid "
sorts.DataTextField= "sorts "
MyoleAp.Dispose()
sorts.Items.Add( new ListItem( "请选择 ", "-1 " ) )
conn.close()
‘------------显示各值-----------
response.write(session( "selectedvalue ") )
response.Write(session( "selectedvalue2 "))
End Sub
'--------DropDownList1的changed改变dorpdownlist2的显示值.----------
Sub DropDownList1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs)
Myds.Tables( "sortsid ").DefaultView.RowFilter= "categoryid= ' " & session( "selectedvalue ") & " ' "
sorts.DataBind()
session( "selectedvalue2 ")=sorts.SelectedValue
End Sub
</script>
<略>
<form runat= "server " >
<asp:DropDownList ID= "category " OnSelectedIndexChanged= "DropDownList1_SelectedIndexChanged " AutoPostBack= "true " runat= "server " />
<p> </p>
<asp:DropDownList ID= "sorts " AutoPostBack= "true " runat= "server " />
</form>
<略>
[解决办法]
<%@ Page Language= "VB " %>
<%@ Import Namespace= "System.Data " %>
<%@ Import Namespace= "System.Data.OleDb " %>
<%@ import namespace= "System.IO " %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN " "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ">
<script runat= "server ">
Dim Myds As DataSet
Sub Page_Load(sender as object, e as Eventargs)
Dim conn As New OleDbConnection()
conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source= " & Server.MapPath( "data.mdb ")
conn.Open()
Dim strSql As String
strSql = "select * from category order by categoryid "
Dim MyoleAp As OleDbDataAdapter = New OleDbDataAdapter(strSql, conn)
Myds = New DataSet()
MyoleAp.Fill(Myds, "category ")
If (Not IsPostBack) Then
category.DataSource = Myds.Tables( "category ")
category.DataValueField = "categoryid "
category.DataTextField = "category "
category.DataBind()
category.Items.Add(New ListItem( "请选择 ", "-1 "))
sorts.Items.Add(New ListItem( "请选择 ", "-1 ")) ' 这两句移动到这里
category.SelectedIndex = 2 ' 加上这一句
End If
Session( "selectedvalue ") = category.SelectedValue
strSql = "select * from sortsid order by sortsid "
MyoleAp.SelectCommand.CommandText = strSql
MyoleAp.Fill(Myds, "sortsid ")
sorts.DataSource = Myds.Tables( "sortsid ")
sorts.DataValueField = "sortsid "
sorts.DataTextField = "sorts "
MyoleAp.Dispose()
conn.Close()
' ------------显示各值-----------
Response.Write(Session( "selectedvalue ") & " ")
Response.Write(Session( "selectedvalue2 "))
End Sub
' --------DropDownList1的changed改变dorpdownlist2的显示值.----------
Sub DropDownList1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs)
Myds.Tables( "sortsid ").DefaultView.RowFilter = "categoryid= ' " & Session( "selectedvalue ") & " ' "
sorts.DataBind()
Session( "selectedvalue2 ") = sorts.SelectedValue
Label1.Text = sorts.SelectedValue ' 加入这一句
End Sub
Protected Sub sorts_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs)
Label1.Text = sorts.SelectedValue
End Sub
</script>
<html xmlns= "http://www.w3.org/1999/xhtml " >
<head runat= "server ">
<title> Untitled Page </title>
</head>
<body>
<form id= "form1 " runat= "server ">
<div>
<asp:DropDownList ID= "category " OnSelectedIndexChanged= "DropDownList1_SelectedIndexChanged " AutoPostBack= "true " runat= "server " />
<asp:DropDownList ID= "sorts " AutoPostBack= "true " runat= "server " OnSelectedIndexChanged= "sorts_SelectedIndexChanged " /> <br />
<asp:Label ID = "Label1 " runat = "server " />
</div>
</form>
</body>
</html>