2016-03-13 9 views
1

У меня есть привязка моего раскрывающегося списка с базой данных. Но на каждом PostBack элементы в раскрывающемся списке снова повторяются.После того, как все последующие объекты dropdownlist повторяются

например. OnPage Load У меня есть эти товары в выпадающем списке 1,2,3,4 .. и т. Д. Теперь предположим, что страница получает postBack, тогда она выглядит как 1,2,3,4,1,2,3,4

Код Vb

Private Sub hospitals_Load(sender As Object, e As EventArgs) Handles Me.Load 
Me.PopulateAreas() 
End Sub 


Private Sub PopulateAreas() 
     If IsPostBack Then 
      Dim citySelector As DropDownList = Page.Master.FindControl("locationSelector") 
      Using conn As New MySqlConnection() 
       conn.ConnectionString = ConfigurationManager _ 
        .ConnectionStrings("conio").ConnectionString() 
       Using cmd As New MySqlCommand() 
        cmd.CommandText = "Select * from areas where areaCity Like '" + citySelector.SelectedItem.ToString + "%'" 
        cmd.Connection = conn 
        conn.Open() 
        Using sdr As MySqlDataReader = cmd.ExecuteReader() 
         While sdr.Read() 
          Dim item As New ListItem() 
          item.Text = sdr("areaName").ToString() 
          item.Value = sdr("areaID").ToString() 
          'item.Selected = Convert.ToBoolean(sdr("IsSelected")) 
          areasList.Items.Add(item) 
         End While 
        End Using 
        conn.Close() 
       End Using 
      End Using 
     End If 

UPDATE

у меня есть мастер-страницу, которая имеет DropDownList городов. Я использую контроль главной страницы на странице mycontent, как показано ниже.

Dim citySelector As DropDownList = Page.Master.FindControl("locationSelector") 

Теперь в моем PopulateArea() класса есть запрос, в котором ИНЕКЕ есть cityselector. Так что в соответствии с городом мой район получает.

+1

это потому, что вы разместили свой код в пункте обратной передачи. Поместите его в позицию «Не отправлять». – yogihosting

+0

@yogihosting У меня есть главная страница, под которой у меня есть dropDowncontrol всех городов. Теперь я использую элемент управления главной страницы на моей странице содержимого. Если я сделаю так, как вы сказали, в области ничего не получится. См. Мой пост по обновлению –

+1

Думаю, теперь ваш выпадающий элемент управления находится на главной странице. Таким образом, вам нужно написать код в не postback-разделе самой главной страницы, так как здесь не будет доступен доступ к главной странице (выпадающий список) непосредственно на странице содержимого. Вы также можете проверить, какую ошибку он дает, поставив точку останова в вашей Visual Studio с помощью клавиши F9. – yogihosting

ответ

0

Изменить код на,

Private Sub PopulateAreas() 
    If IsPostBack Then 
     areasList.Items.clear() 
     Dim citySelector As DropDownList = Page.Master.FindControl("locationSelector") 
     Using conn As New MySqlConnection() 
      conn.ConnectionString = ConfigurationManager _ 
       .ConnectionStrings("conio").ConnectionString() 
      Using cmd As New MySqlCommand() 
       cmd.CommandText = "Select * from areas where areaCity Like '" + citySelector.SelectedItem.ToString + "%'" 
       cmd.Connection = conn 
       conn.Open() 
       Using sdr As MySqlDataReader = cmd.ExecuteReader() 
        While sdr.Read() 
         Dim item As New ListItem() 
         item.Text = sdr("areaName").ToString() 
         item.Value = sdr("areaID").ToString() 
         'item.Selected = Convert.ToBoolean(sdr("IsSelected")) 
         areasList.Items.Add(item) 
        End While 
       End Using 
       conn.Close() 
      End Using 
     End Using 
    End If 
End Sub 
1

его довольно просто .. событие загрузки страницы запускается каждый раз, когда что-либо возвращается.

использование этого

Private Sub hospitals_Load(sender As Object, e As EventArgs) Handles Me.Load 
     If Page.IsPostBack Then 

     //do stuff when post back occurs 

     Else 

     Me.PopulateAreas() //put this function here so that it executes only once 
     End If 
    End Sub 
3

Вызов вашей функции внутри не обратной передачи события так, что выпадающий не вызывается на обратной передачи событий (который заполняет это все).

Private Sub hospitals_Load(sender As Object, e As EventArgs) Handles Me.Load 
    if ispostback = false then 
     Me.PopulateAreas() 
    end if 
End Sub 
1

Если ваши значения выпадающего списка должны быть изменены после обратной передачи. Сначала скажите значения, где 1,2,3,4 и при обратной передаче, если значения должны быть 2,3,4,5 на основе некоторых значений, которые вы изменяете на элементах формы, вам сначала необходимо очистить значения выпадающего списка и затем добавьте к нему новые значения.

areasList.Items.Clear() 

см также, что AppendDataBoundItems это не так: в вашей .aspx странице