【发布时间】:2016-03-27 05:05:51
【问题描述】:
这似乎是非常基本的问题,但无法解决。我有列表视图控件和一些过滤器作为单选按钮列表。现在,当页面加载时,它会正确显示数据。但是当我尝试对其应用过滤器时,它会显示异常“对象引用未设置为对象的实例”。并且还请建议是否可以在过滤器上应用任何简化的方法来减少我当前的编码长度。
vb codePreRender 事件
Private Sub chemists_PreRender(sender As Object, e As EventArgs) Handles Me.PreRender
Try
Dim citySelector As DropDownList = Page.Master.FindControl("locationSelector")
If Session("masterLocation") Is Nothing Then
citySelector.Text = "Pune"
Else
citySelector.Text = Session("masterLocation").ToString()
End If
Catch ex As Exception
Response.Write(ex)
End Try
Me.PopulateAreas()
Try
If Not Session("Data") Is Nothing Then
chemists.DataSource = Session("Data")
chemists.DataBind()
Else
Dim citySelector As DropDownList = Page.Master.FindControl("locationSelector")
query = "SELECT chemistID, name, address, thumbnail, slot1From, slot1To, products FROM chemists where city like '" + citySelector.SelectedItem.ToString + "%' and status = 'active'"
Dim cmd As New MySqlCommand(query, con)
cmd.CommandTimeout = 120
Dim da As New MySqlDataAdapter(cmd)
Dim table As New DataTable
da.Fill(table)
ViewState("Data") = table
chemists.DataSource = table
chemists.DataBind()
End If
'mainCount.Text = table.Rows(0)("countRows").ToString
Catch ex As Exception
Response.Write(ex)
End Try
End Sub
这里我使用了预渲染事件,因为我在母版页中有下拉列表,并且我从母版页获得了它的控制权。直到这里一切正常。
当我尝试在其中应用页面过滤器时出现问题。以下是代码
Private Sub areasList_SelectedIndexChanged(sender As Object, e As EventArgs) Handles areasList.SelectedIndexChanged
Dim citySelector As DropDownList = Page.Master.FindControl("locationSelector")
locationFilter.Text = areasList.SelectedItem.ToString
city.Text = citySelector.SelectedItem.ToString
area.Text = areasList.SelectedIndex.ToString
Try
Session("Data") = Nothing
If areasList.SelectedValue <> "All" And productList.SelectedValue <> "All" And paymentsList.SelectedValue <> "All" Then
query = "SELECT * FROM chemists where address Like '%" + areasList.SelectedItem.ToString + "%' and products Like '%" + productList.SelectedItem.ToString + "%' and payment Like '%" + paymentsList.SelectedItem.ToString + "%' and city = '" + citySelector.SelectedItem.ToString + "' and status = 'active' "
ElseIf areasList.SelectedValue = "All" And productList.SelectedValue <> "All" And paymentsList.SelectedValue.ToString <> "All" Then
query = "SELECT * FROM chemists where products Like '%" + productList.SelectedItem.ToString + "%' and payment Like '%" + paymentsList.SelectedItem.ToString + "%' and city = '" + citySelector.SelectedItem.ToString + "' and status = 'active'"
ElseIf areasList.SelectedValue = "All" And productList.SelectedValue = "All" And paymentsList.SelectedValue.ToString <> "All" Then
query = "SELECT * FROM chemists WHERE payment Like '%" + paymentsList.SelectedItem.ToString + "%' and city = '" + citySelector.SelectedItem.ToString + "' and status = 'active'"
ElseIf areasList.SelectedValue <> "All" And productList.SelectedValue = "All" And paymentsList.SelectedValue.ToString = "All" Then
query = "SELECT * FROM chemists WHERE address Like '%" + areasList.SelectedItem.ToString + "%' and city = '" + citySelector.SelectedItem.ToString + "' and status = 'active'"
ElseIf areasList.SelectedValue <> "All" And productList.SelectedValue <> "All" And paymentsList.SelectedValue.ToString = "All" Then
query = "SELECT * FROM chemists WHERE address Like '%" + areasList.SelectedItem.ToString + "%' and products Like '%" + productList.SelectedItem.ToString + "%' and city = '" + citySelector.SelectedItem.ToString + "' and status = 'active'"
ElseIf areasList.SelectedValue = "All" And productList.SelectedValue <> "All" And paymentsList.SelectedValue.ToString = "All" Then
query = "SELECT * FROM chemists WHERE products Like '%" + productList.SelectedItem.ToString + "%' and city = '" + citySelector.SelectedItem.ToString + "' and status = 'active'"
ElseIf areasList.SelectedValue = "All" And productList.SelectedValue = "All" And paymentsList.SelectedValue = "All" Then
query = "SELECT * FROM chemists where city = '" + citySelector.SelectedItem.ToString + "' and status = 'active'"
End If
Dim cmd As New MySqlCommand(query, con)
Dim da As New MySqlDataAdapter(cmd)
Dim table As New DataTable
da.Fill(table)
Session("Data") = table
chemists.DataSource = table
chemists.DataBind()
Catch ex As Exception
Response.Write(ex)
End Try
End Sub
【问题讨论】:
-
你有什么机制来调试它?
-
@Drew 我已经在过滤器的 selectedIndexChanged 上放置了断点,在通过查询传递它之后,它在查询变量中显示 Nothing。所以可能查询没有执行
-
有时我们真正能帮上忙的只有橡皮鸭调试:p
-
@Drew 我已经逐行检查放置断点。将其打到相对查询后,它没有绑定列表视图并引发异常,因此查询什么也没有。..
标签: mysql asp.net vb.net listview