2016-03-21 2 views
0

Не понимаю, что я здесь делаю, но мой список не фильтрует данные по выбору. Когда страница загружается, она получает данные в соответствии с выбранным городом с главной страницы. Это работает, но когда я применяю другой фильтр, он не изменяется. На странице у меня есть несколько фильтров.Фильтровать список строк с помощью выбора радиообмена

VB

Private Sub hospitals_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 

     query = "SELECT hospitalID, name, address, thumbnail, knownFor, mondayFrom, mondayTo, consultancyFees FROM hospitals where city like '" + citySelector.SelectedItem.ToString + "%'" 
     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 
     hospitals.DataSource = table 
     hospitals.DataBind() 
     'countItems.Text = String.Format(table.Rows(0)("dataCount")) 
    Catch ex As Exception 
     Response.Write(ex) 
    End Try 
End Sub 

Private Sub areasList_SelectedIndexChanged(sender As Object, e As EventArgs) Handles areasList.SelectedIndexChanged 
    'locationFilter.Text = areasList.SelectedItem.ToString 
    Try 
     ViewState("Data") = "" 
     If areasList.SelectedValue <> "All" And servicesList.SelectedValue <> "All" And facilitiesList.SelectedValue <> "All" And paymentsList.SelectedValue <> "All" Then 
      query = "SELECT * FROM hospitals where address Like '" + areasList.SelectedItem.ToString + "%' and services Like '%" + servicesList.SelectedItem.ToString + "%' and facilities Like '%" + facilitiesList.SelectedItem.ToString + "%'" 

     ElseIf areasList.SelectedValue = "All" And servicesList.SelectedValue <> "All" And facilitiesList.SelectedValue <> "All" And paymentsList.SelectedValue <> "All" Then 
      query = "SELECT * FROM hospitals where services Like '%" + servicesList.SelectedItem.ToString + "%' and facilities Like '%" + facilitiesList.SelectedItem.ToString + "%' and payment Like '%" + paymentsList.SelectedItem.ToString + "%'" 

     ElseIf areasList.SelectedValue <> "All" And servicesList.SelectedValue = "All" And facilitiesList.SelectedValue <> "All" And paymentsList.SelectedValue <> "All" Then 
      query = "SELECT * FROM hospitals where areaName Like '%" + areasList.SelectedItem.ToString + "%' and facilities Like '%" + facilitiesList.SelectedItem.ToString + "%' and payment Like '%" + paymentsList.SelectedItem.ToString + "%'" 

     ElseIf areasList.SelectedValue <> "All" And servicesList.SelectedValue <> "All" And facilitiesList.SelectedValue = "All" And paymentsList.SelectedValue <> "All" Then 
      query = "SELECT * FROM hospitals where areaName Like '%" + areasList.SelectedItem.ToString + "%' and services Like '%" + servicesList.SelectedItem.ToString + "%' and payment Like payment Like '%" + paymentsList.SelectedItem.ToString + "%'" 

     ElseIf areasList.SelectedValue <> "All" And servicesList.SelectedValue <> "All" And facilitiesList.SelectedValue <> "All" And paymentsList.SelectedValue = "All" Then 
      query = "SELECT * FROM hospitals where areaName Like '%" + areasList.SelectedItem.ToString + "%' and services Like '%" + servicesList.SelectedItem.ToString + "%' and facilities Like '%" + facilitiesList.SelectedItem.ToString + "%'" 

     ElseIf areasList.SelectedValue <> "All" And servicesList.SelectedValue = "All" And facilitiesList.SelectedValue = "All" And paymentsList.SelectedValue = "All" Then 
      query = "SELECT * FROM hospitals where areaName Like '%" + areasList.SelectedItem.ToString + "%'" 

     ElseIf areasList.SelectedValue = "All" And servicesList.SelectedValue <> "All" And facilitiesList.SelectedValue = "All" And paymentsList.SelectedValue = "All" Then 
      query = "SELECT * FROM hospitals where services Like '%" + servicesList.SelectedItem.ToString + "%'" 

     ElseIf areasList.SelectedValue = "All" And servicesList.SelectedValue = "All" And facilitiesList.SelectedValue <> "All" And paymentsList.SelectedValue = "All" Then 
      query = "SELECT * FROM hospitals where facilities Like '%" + facilitiesList.SelectedItem.ToString + "%'" 

     ElseIf areasList.SelectedValue = "All" And servicesList.SelectedValue = "All" And facilitiesList.SelectedValue = "All" And paymentsList.SelectedValue <> "All" Then 
      query = "SELECT * FROM hospitals where payment Like '%" + paymentsList.SelectedItem.ToString + "%'" 

     ElseIf areasList.SelectedValue <> "All" And servicesList.SelectedValue <> "All" And facilitiesList.SelectedValue = "All" And paymentsList.SelectedValue = "All" Then 
      query = "SELECT * FROM hospitals where areaName Like '%" + areasList.SelectedItem.ToString + "%' and services Like '%" + servicesList.SelectedItem.ToString + "%'" 

     ElseIf areasList.SelectedValue = "All" And servicesList.SelectedValue = "All" And facilitiesList.SelectedValue = "All" And paymentsList.SelectedValue = "All" Then 
      query = "SELECT * FROM hospitals WHERE status Like 'Active'" 
     End If 

     Dim cmd As New MySqlCommand(query, con) 
     Dim da As New MySqlDataAdapter(cmd) 
     Dim table As New DataTable 

     da.Fill(table) 
     ViewState("Data") = table 
     hospitals.DataSource = table 
     hospitals.DataBind() 
    Catch ex As Exception 
     'Response.Write(ex) 
    End Try 
End Sub 
+0

Попробуйте отладить, сообщите мне, что произойдет. –

+0

Я думаю, что проблема - это ваш метод PreRender. Поскольку он выполняется каждый раз, когда страница загружается, она обновляет список со старым списком. Итак, что вы можете сделать, просто переместите этот код на ваш Page_Load и введите в * if (! IsPostBack) * блок (предпочтительнее переходить к методу Page_Load) – Khazratbek

ответ

0

Проблема у вас есть зависит от того, где вы делаете вещи. В коде есть много проблем. Прежде всего я могу предложить, чтобы переместить код на предварительно rendere в onload/Page_Load В этом методе вы имеете

protected override void OnLoad(EventArgs e) 
{ 
    base.OnLoad(e); 
    // here code executes Always on every onload 
    if (Page.IsPostback) 
     return; 
    // here code executes only first load 
    FillCombo(); 
    SetInitialValues(); 
    BindSearchResults(); 
} 

Я также предлагаю:

  1. переместить все запросы в классе уровня данных
  2. предпочесть ноль или «» «Все»
  3. писать Status = «ACTIVE», а не как
  4. я прочитал много раз. page.Master.FindControl ("locationSelector"): я думаю, что есть лучший способ получить locationSelector. Если он находится в элементе управления ascx или на главной странице, вы можете изменить его публично.