2013-07-25 114 views
1

Hei all。如果有什麼不明確的話請告訴C#WPF綁定到DataBase

我有dataGrid和TreeView。 我已經加載數據庫作爲實體數據模型和一些表。 其中一個「關係」表應顯示給數據網格。但其(關係表)列依賴於其他表作爲系統,模型,功能和設備。在數據網格中應該是4列,其中包含這些系統,型號,功能和設備的名稱。 (圖1應該是)

問題在如何顯示。數據源不工作好...見圖片2

<Grid DataContext="{StaticResource relationsViewSource}"> 
     <DataGrid AutoGenerateColumns="True" Name="gridInventory" HorizontalContentAlignment="Right" Margin="255,12,12,128" ItemsSource="{Binding}" /> 
     <StackPanel Height="391" HorizontalAlignment="Left" Margin="10,10,0,0" Name="stackPanel1" VerticalAlignment="Top" Width="239" DataContext="{StaticResource systemsViewSource}" > 
      <TreeView Height="391" Name="treeView1" Width="239" VerticalContentAlignment="Top" HorizontalAlignment="Left" VerticalAlignment="Top" ItemsSource="{Binding}" /> 
     </StackPanel> 
    </Grid> 

圖片1: enter image description here

圖2: enter image description here

enter image description here

回答

3

你是你DataGridTreeView有的結合兩者的一個對象,但沒有告訴WPF如何繪製物體。當WPF不知道如何繪製object,默認情況下它在吸引它使用與結合到Text一個TextBlock對象的.ToString()

您需要設置ItemTemplate告訴WPF如何繪製你的個人物品,如這樣的:

<TreeView.ItemTemplate> 
    <DataTemplate> 
     <TextBlock Text="{Binding Name}" /> 
    </DataTemplate> 
</TreeView.ItemTemplate> 

你也可以使用隱式DataTemplate告訴WPF如何繪製特定對象。這只是一個DataTemplate,指定DataType而不是Key,並且WPF將在嘗試呈現指定類型的對象時使用它。

如果你想避免刪除AutoGenerateColumns="True"並手動指定你的DataGrid的列,這可能是使用的方法。

<DataGrid.Resources> 
    <DataTemplate DataType="{x:Type local:Device}"> 
     <TextBlock Text="{Binding Name}" /> 
    </DataTemplate> 
</DataGrid.Resources> 
0

TreeView的你就需要設置綁定到要顯示的屬性上的路徑,

Devices是一個集合,你需要在那裏放置一個ListView或者一些顯示集合的東西,然後在其上放置一個DataTemplate來顯示你需要的東西,或者綁定到一個轉換器來返回一個靜態的字符串表示設備列表

或者只是找人做這一切爲你 - 似乎對這裏的情況洛爾