两个下拉列表,一个是lstCls,另一个是lstSubCls
lstCls的列表项来自数据库,是静态绑定的;lstSubCls的列表项根据lstCls的点选动态改变,内容也来自数据库。
其实是很简单的,但写完后发现lstCls的第一项不起作用:加载后,选其他的列表项,lstSubCls可以联动,但选第一项的话,lstSubCls的内容就被清空。另外,选lstCls后,在lstSubCls的内容已正确填充的情况下,点选lstSubCls的列表项,事件触发的是lstCls的onselectindexchanged。代码如下,请帮忙分析一下问题出在哪,谢谢!
<asp:DropDownList ID="lstCls" runat ="server" AutoPostBack ="True" Width ="200px"
DataSourceID="dataProductCls" DataTextField="Class"
DataValueField="ID"/>
<br />
<asp:DropDownList ID="lstSubCls" runat ="server" Width ="200" AutoPostBack ="true" />Protected Sub lstCls_SelectedIndexChanged(sender As Object, e As System.EventArgs) Handles lstCls.SelectedIndexChanged
Dim strSelected As String = lstCls.SelectedItem.Text
dataProductSubCls.SelectParameters.Clear()
dataProductSubCls.SelectParameters.Add("Selected", TypeCode.String, strSelected)
dataProductSubCls.SelectCommand = "SELECT ProductCls.Class, ProductSubCls.ID, ProductSubCls.SubClass FROM ProductSubCls " &
"INNER JOIN ProductCls ON ProductSubCls.Class = ProductCls.ID " &
"WHERE ProductCls.Class = @Selected"
lstSubCls.Enabled = True
lstSubCls.DataSourceID = "dataProductSubCls"
lstSubCls.DataTextField = "SubClass"
lstSubCls.DataValueField = "ID"
lstSubCls.DataBind()
End Sub Protected Sub lstSubCls_SelectedIndexChanged(sender As Object, e As System.EventArgs) Handles lstSubCls.SelectedIndexChanged
Dim strSelected As String = lstSubCls.SelectedItem.Text
sqlComm = New SqlCommand("SELECT Pic, Alt FROM ProductSubCls WHERE SubClass = @Selected", sqlConn)
sqlComm.Parameters.Add("@Selected", Data.SqlDbType.NVarChar, 50)
sqlComm.Parameters("@Selected").Value = strSelected
Try
sqlConn.Open()
reader = sqlComm.ExecuteReader
If reader.Read Then
...'将内容附给其他控件
Else
...'执行其他代码
End If
Catch ex As Exception
Response.Write (ex.Message)
Finally
sqlConn.Close()
End Try
End Sub
lstCls的列表项来自数据库,是静态绑定的;lstSubCls的列表项根据lstCls的点选动态改变,内容也来自数据库。
其实是很简单的,但写完后发现lstCls的第一项不起作用:加载后,选其他的列表项,lstSubCls可以联动,但选第一项的话,lstSubCls的内容就被清空。另外,选lstCls后,在lstSubCls的内容已正确填充的情况下,点选lstSubCls的列表项,事件触发的是lstCls的onselectindexchanged。代码如下,请帮忙分析一下问题出在哪,谢谢!
<asp:DropDownList ID="lstCls" runat ="server" AutoPostBack ="True" Width ="200px"
DataSourceID="dataProductCls" DataTextField="Class"
DataValueField="ID"/>
<br />
<asp:DropDownList ID="lstSubCls" runat ="server" Width ="200" AutoPostBack ="true" />Protected Sub lstCls_SelectedIndexChanged(sender As Object, e As System.EventArgs) Handles lstCls.SelectedIndexChanged
Dim strSelected As String = lstCls.SelectedItem.Text
dataProductSubCls.SelectParameters.Clear()
dataProductSubCls.SelectParameters.Add("Selected", TypeCode.String, strSelected)
dataProductSubCls.SelectCommand = "SELECT ProductCls.Class, ProductSubCls.ID, ProductSubCls.SubClass FROM ProductSubCls " &
"INNER JOIN ProductCls ON ProductSubCls.Class = ProductCls.ID " &
"WHERE ProductCls.Class = @Selected"
lstSubCls.Enabled = True
lstSubCls.DataSourceID = "dataProductSubCls"
lstSubCls.DataTextField = "SubClass"
lstSubCls.DataValueField = "ID"
lstSubCls.DataBind()
End Sub Protected Sub lstSubCls_SelectedIndexChanged(sender As Object, e As System.EventArgs) Handles lstSubCls.SelectedIndexChanged
Dim strSelected As String = lstSubCls.SelectedItem.Text
sqlComm = New SqlCommand("SELECT Pic, Alt FROM ProductSubCls WHERE SubClass = @Selected", sqlConn)
sqlComm.Parameters.Add("@Selected", Data.SqlDbType.NVarChar, 50)
sqlComm.Parameters("@Selected").Value = strSelected
Try
sqlConn.Open()
reader = sqlComm.ExecuteReader
If reader.Read Then
...'将内容附给其他控件
Else
...'执行其他代码
End If
Catch ex As Exception
Response.Write (ex.Message)
Finally
sqlConn.Close()
End Try
End Sub
解决方案 »
- VS2008
- 网页上有3张图片的链接要实现下载可每次都是把Handler1.ashx下下来
- javascript调用服务器端函数的疑问
- updatepanel 错误 Sys.WebForms.PageRequestManagerServerErrorException
- aspx文件中如何绑定数据源。没有CS文件
- 没分了,请教Treeview中怎样在展开一个节点的同时把之前展开的那个节点折叠起来
- 晕,请问web程序在使用visual studio应用服务器正常登陆,而IIs web 则不正常
- asp.net动态控件的事件绑定问题?AddHandler和Addressof
- 做一个成功的技术总监,需要什么条件,薪水应该是多少?(来者有分)
- 请教,关于图片上传的问题?
- 怎么在自己的电脑上安装leadbbs呀?
- 【菜鸟提问】关于浏览器兼容的问题
2. lstSubCls回发你会激发onselectindexchanged不知道你什么意思,onselectindexchanged是脚本?
如果你会触发lstCls_SelectedIndexChanged事件那朔岷你的lstCls数据绑定代码有问题。
摆脱!你为什么不定义事件处理程序,仅仅定义一个AutoPOstBack属性呢?这就好像有病乱投医。
1. 确定第一项下有子选项;
2. 事件名称写错了。我的意思是,这是在Debug模式下我发现,点击lstSubCls的选项会激发lstCls的lstCls_SelectedIndexChanged。而本来要激发的应该是lstSubCls_SelectedIndexChanged。数据绑定用的sqlDataSource.NET的学习还处于初级阶段。如果lstCls的数据绑定代码有问题,为什么点击lstCls的别的选项,则可以正常显示lstSubCls呢?
lstSubCls的事件处理程序不是AutoEventWireup的吗?
你这句Selected是不是少了一个@至于会激发lstCls_SelectedIndexChanged事件是因为页面发生了回发造成的,每次回发数据会重新绑定,所以会激发这个事件。
确实,这一点没说清楚。我用的是vb.net,环境是VS2010selectparameter参数好象没错,是不需要加@的。至于回发,是否应该在page_load里面绑定数据,而不是在前台“设计”中通过点选“属性”面板来操作?过会儿试一下