Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB .NET > Привязка TreeView к базе данных


Автор: Andruxa28 25.1.2011, 23:48
Здравствуйте!
Возникла проблемка отображения данных из связанных таблиц БД Access
Пришла мысль вывести используя TreeView, но не знаю возможно ли вообще это.
Исходные данные:
имеем вот это
user posted image
хочу сделать вот так
user posted image
если возможно, то помогите реализовать
а если нет, подкиньте идею, какие еще есть варианты вывода данной информации
Спасибо!


Автор: diadiavova 26.1.2011, 00:10
Цитата(Andruxa28 @  25.1.2011,  23:48 Найти цитируемый пост)
но не знаю возможно ли вообще это.

А почему нет? Двойной цикл, во внешнем обходишь таблицу со странами и для каждой создаешь узел дерева, во внутреннем - запрашиваешь из базы города, находящиеся в текущей стране, создаешь для них узлы и добавляешь их в узел страны. В чем затруднение то? smile 

Автор: Andruxa28 26.1.2011, 00:53
Цитата(diadiavova @  26.1.2011,  00:10 Найти цитируемый пост)
В чем затруднение то? 

да собственно затруднение в выше сказанном
вот смотри  к базе подключился
Код

        Dim cmdString As String = "SELECT * FROM Страны"
        Dim conStr As String _
        = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\db1.mdb"
        Dim myConnection As OleDbConnection = New OleDbConnection(conStr)
        Dim tblName = "Страны"
        Try
            myConnection.Open()
            Dim da As OleDbDataAdapter _
            = New OleDbDataAdapter(cmdString, myConnection)
            Dim dataSet1 As DataSet = New DataSet()
            da.Fill(dataSet1, tblName)

а вот результат выборки "SELECT * FROM Страны" как связать с узлами дерева?
или меня вообще не в ту степь понесло..

Автор: diadiavova 26.1.2011, 01:00
Цитата(Andruxa28 @  26.1.2011,  00:53 Найти цитируемый пост)
а вот результат выборки "SELECT * FROM Страны" как связать с узлами дерева?

Никак не связать, придется делать "ручками". Тривью не приспособлен для связывания с данными, так что - старые добрые циклы тебе в помощь.

Автор: Andruxa28 26.1.2011, 01:21
Код

 For i = 0 To dataSet1.Tables("Страны").Rows.Count - 1
                TreeView1.Nodes.Add(dataSet1.Tables("Страны").Rows(i).Item("Страна"))
            Next

узлы "страны" получилось добавить
а вот на "городах" застрял   smile 

Автор: diadiavova 26.1.2011, 01:31
Ну я же объяснил, что нужен вложенный цикл и лучше использовать форич вместо фор.
Код

For Each countryrow In dataSet1.Tables("Страны").Rows
    Dim countryNode = TreeView1.Nodes.Add(countryrow.Item("Страна"))
    For Each cityrow in dataset1.Tables("Города").Rows
        If cityrow("СтранаИд") = countryrow("СтранаИд") Then
            countrynode.Nodes.Add(cityrow.Item("Город"))
        End If
    Next    
Next

Код примерный, но думаю понятно что к чему.

Автор: Andruxa28 26.1.2011, 02:25
та это я понял 
в предыдущем посту неправильно написал. Сори
вот при попытке добавления "городов"
получаю вот такую вот ошибку  
Код

Сбой при разрешении перегрузки: ни один Public "Add" нельзя вызвать с данными аргументами:   
 'Public Overrides Function Add(node As System.Windows.Forms.TreeNode) As Integer':        
 Соответствующий параметру "node" аргумент нельзя преобразовать из "DBNull" в "TreeNode".     
'Public Overrides Function Add(text As String) As System.Windows.Forms.TreeNode':        
 Соответствующий параметру "text" аргумент нельзя преобразовать из "DBNull" в "String".

вот с этим и запара

Автор: diadiavova 26.1.2011, 12:05
Цитата(Andruxa28 @  26.1.2011,  02:25 Найти цитируемый пост)
 Соответствующий параметру "text" аргумент нельзя преобразовать из "DBNull" в "String".

Значит у тебя нет такого значения в таблице.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)