WPF Treeview в VB.net - PullRequest
       2

WPF Treeview в VB.net

3 голосов
/ 15 ноября 2011

Последние пару дней я искал какой-нибудь рабочий код, чтобы настроить древовидную структуру в моем приложении WPF для отображения некоторых данных базы данных.Я использую VB, поскольку я гораздо увереннее в этом - что резко ограничило примеры кода там.Другие примеры, которые я нашел, использовали введенные вручную данные для заполнения каждого узла по сравнению с базой данных, что было мало чем помочь.Я наконец нашел некоторый код, который связывал каждый узел с запросом и связывал запрос через DataRelation.Отлично, это должно работать идеально!

В примере использовалась база данных Northwind, поэтому я изменил ее на базу данных и включил запросы.К моему шоку, древовидная структура заполнилась нормально, кроме .... все данные невидимы.

Вот код:

Imports MySql.Data.MySqlClient
Imports System.Data
Imports System.ComponentModel
Imports System.Xml
Imports System.IO
Class Window2
Dim connStr As String = "Server=127.0.0.1;Database=psdb;Uid=root;Pwd=;Connect    Timeout=30;"
Dim conn As New MySqlConnection(connStr)
Function GetRelationalData() As DataSet

    Dim CategoryAdapter As MySqlDataAdapter = New MySqlDataAdapter("select distinct Dist_name, dist_id from distributors".ToString, conn)
    Dim ProductsAdapter  As MySqlDataAdapter = New MySqlDataAdapter("select d.dist_id, t.Title_name, title_id from titles t, distributors d where d.dist_id = t.dist_id".ToString, conn)
    Dim ProductData As DataSet = New DataSet()
    CategoryAdapter.Fill(ProductData, "Categories") 'fill Categories
    ProductsAdapter.Fill(ProductData, "Products") 'fill products
    Dim CategoryRelation As DataRelation
    CategoryRelation = New DataRelation("ChildrenRelationship", _
    ProductData.Tables("Categories").Columns("dist_id"), _
    ProductData.Tables("Products").Columns("dist_id"), True)
    CategoryRelation.Nested = True
    ProductData.Relations.Add(CategoryRelation)
    Return ProductData
End Function
Private Sub Button1_Click(ByVal sender As System.Object, _
                          ByVal e As RoutedEventArgs) Handles Button1.Click
    BindData()
End Sub
Private Sub BindData()
    TreeView1.DataContext = GetRelationalData()
End Sub

End Class

и XAML:

<Window x:Class="Window2"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="400" Width="550"><Window.Resources>
<DataTemplate x:Key="ProductTemplate" >
    <TextBlock Text="{Binding ProductName}"></TextBlock>
</DataTemplate>
<HierarchicalDataTemplate x:Key="CategoryTemplate" 
                  ItemsSource="{Binding ChildrenRelationship}" 
                  ItemTemplate="{StaticResource ProductTemplate}">
    <TextBlock Text="{Binding CategoryName}"></TextBlock>
</HierarchicalDataTemplate>
</Window.Resources>
<Grid>

и вот, что я получаю в итоге с данными, кажется, там, но вы не можете видеть это.Помогите!

enter image description here

PS Здесь может быть некоторая путаница в отношении объектов.Я вернулся, пытаясь максимально приблизиться к исходному коду, когда обнаружил проблему, заменив запросы только своими собственными - исходный код использовал «Категории» и «Продукты», где я «использую Дистрибьюторов» и «Титулы»

Ответы [ 2 ]

0 голосов
/ 17 ноября 2011

ОК, Тим не хочет похвалы, я думаю. Вот исправленный код:

<Window x:Class="Window2" 
 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
Title="Window1" Height="400" Width="550">
<Window.Resources> 
<DataTemplate x:Key="ProductTemplate" > 
<TextBlock Text="{Binding title_name}">
</TextBlock> 
</DataTemplate> 
<HierarchicalDataTemplate x:Key="CategoryTemplate"           
ItemsSource="{Binding ChildrenRelationship}"                    
ItemTemplate="{StaticResource   ProductTemplate}">     
<TextBlock Text="{Binding dist_name}"></TextBlock> 
</HierarchicalDataTemplate>
</Window.Resources>
<Grid> 
0 голосов
/ 15 ноября 2011

Я бы настоятельно рекомендовал получить Snoop и запустить его во время работы приложения, чтобы увидеть, с чем на самом деле связаны ваши элементы пользовательского интерфейса.

Я подозреваю, что это просто проблема с недействительнымПривязка данных в вашем TextBlock

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...