2015-06-15 5 views
0

Это мой второй опыт работы с VB.net, поэтому я не уверен в языке. Я пытаюсь создать значения списка из моего столбца таблицы под названием «категория». Есть дубликаты, поэтому я пытаюсь только отображать каждую категорию один раз. Я должен сделать это так, потому что пользователь может добавить больше категорий, что означает, что мои значения в списке должны динамически обновляться.Создать значения из базы данных

Я не уверен, что я делаю это процесс право:

Protected Sub CategoryListBox_SelectedIndexChanged(sender As Object, e As EventArgs) Handles CategoryListBox.SelectedIndexChanged 

    Dim conn As OleDbConnection = New OleDbConnection("Provider=""*******"";user id=" & strUserID & ";data source=" & strDatabase & ";password=" & strPssWd) 

    Dim ClassifiedStr As OleDbCommand = New OleDbCommand("SELECT classid, Addate, username, category, description FROM t_classifieds", conn) 
    Dim OracleDataAdapterAds As OleDbDataAdapter = New OleDbDataAdapter 
    OracleDataAdapterAds.SelectCommand = ClassifiedStr 
    Dim DsAds As DataSet = New DataSet 
    DsAds.Clear() 
    OracleDataAdapterAds.Fill(DsAds, "t_classifieds") 

    CategoryListBox.DataTextField = "category" 
    CategoryListBox.DataValueField = "category" 
    CategoryListBox.DataSource = DsAds 
    CategoryListBox.DataMember = "t_classifieds" 
    CategoryListBox.DataBind() 

    Dim Categories As String 
    Dim CategoryID 

    For Each dr As DataRow In DsAds.Tables("t_classifieds").Rows 
     Categories = dr("category").ToString() 
     CategoryID = dr("classid").ToString() 

     CategoryListBox.Items.Add(Categories) 

    Next dr 

    conn.Close() 
End Sub 

Я посмотрел на другие примеры, и я попытался отразить их, но ничего не печатает в моем ListBox.

Моя вторая версия моего кода работает, если я использую предопределенное значение Dim, но по какой-то причине я не получаю подключение к базе данных для отображения списка категорий базы данных.

Вторая версия:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 

    FillList() 

End Sub 

Private Sub FillList() 

    Dim conn As OleDbConnection = New OleDbConnection("Provider=""MSDAORA.1"";user id=" & strUserID & ";data source=" & strDatabase & ";password=" & strPssWd) 
    Dim data_reader As OleDbDataReader 
    Dim ClassifiedStr As OleDbCommand = New OleDbCommand("SELECT * FROM t_classifieds ", conn) 
    Dim Categories 
    conn.Open() 
    data_reader = ClassifiedStr.ExecuteReader() 
    CategoryListBox.Items.Clear() 
    If data_reader.HasRows Then 
     Do While data_reader.Read() 
      Categories = data_reader.Item("category") 
      'CategoryListBox.Items.Add(New ListItem(Categories)) 
      CategoryListBox.Items.Add(Categories.ToString()) 
     Loop 
    End If 
    data_reader.Close() 
    data_reader = Nothing 
    ClassifiedStr.Dispose() 
    ClassifiedStr = Nothing 
    conn.Close() 
    conn.Dispose() 


    'Dim dWorkDate As Date = CDate("01.01.2014") 
    'While dWorkDate < Date.Today 
    'CategoryListBox.Items.Add(dWorkDate.ToString("dd.MM.yyyy")) 
    'dWorkDate = dWorkDate.AddDays(1) 
    'End While 
End Sub 

ответ

1

Выберите DISTINCT значения для категории:

Dim ClassifiedStr As OleDbCommand = New OleDbCommand("SELECT DISTINCT category FROM t_classifieds", conn) 

'... 

CategoryListBox.DataSource = DsAds.Tables("t_classifieds") 
CategoryListBox.DataTextField = "category" 
CategoryListBox.DataValueField = "category" 

Кстати, вам не нужно вызывать Clear на New DataSet.

+0

Я сделал то, что вы предложили и DisplayMember дал мне ошибку о том, что не может быть использована для ListBox. Кроме того, пока ничего не отображается для моего списка – narue1992

+0

Oh, ASP. СЕТЬ. Как я пропустил эти теги. См. Обновление. – Keith

+0

Я вижу обновление, но ничего не печатает. Не знаете, в чем проблема:/ – narue1992

0

Проработал мой старый код, но мне нужен код @Keith Sql.

If Not IsPostBack Then 
     If Not CategoryListBox Is Nothing Then 


      Dim conn As OleDbConnection = New OleDbConnection("Provider=""****"";user id=" & strUserID & ";data source=" & strDatabase & ";password=" & strPssWd) 

      'Display All Classified Ads listed in the Database based on the following format/order 
      'Date Name Home Phone Number  Description 

      Dim ClassifiedStr As OleDbCommand = New OleDbCommand("SELECT DISTINCT category FROM t_classifieds", conn) 
      Dim OracleDataAdapterAds As OleDbDataAdapter = New OleDbDataAdapter 
      OracleDataAdapterAds.SelectCommand = ClassifiedStr 
      Dim DsAds As DataSet = New DataSet 
      DsAds.Clear() 
      OracleDataAdapterAds.Fill(DsAds, "t_classifieds") 
      CategoryListBox.DataSource = DsAds 
      CategoryListBox.DataMember = "t_classifieds" 
      CategoryListBox.DataBind() 
     End If 
    End If 

Только Issue у меня есть случайное пространство:/ enter image description here