2016-02-01 20 views
0

我會從存儲過程中填充一個樹形視圖。存儲過程的C#Treeview

該程序返回一系列季節和劇集。

program_id program_header_id title 
1   Null    Game of Thrones 
2   1     Saison 1 
3   1     Saison 2 
4   1     Saison 3 
5   2     Episode 1 
6   2     Episode 2 
7   2     Episode 3 
8   2     Episode 4 
9   3     Episode 1 
10   3     Episode 2 
11   4     Episode 1 

我想看看這一個TreeView

- Game of Thrones 
    - Saison 1 
     - Episode 1 
     - Episode 2 
     - Episode 3 
     - Episode 4 
    - Saison 2 
     - Episode 1 
     - Episode 2 
    - Saison 3 
     - Episode 1 

這裏是我的代碼來填充樹狀

SqlCommand cmd; 
cmd = new SqlCommand("S_fiction_program_search_v3", mycon); 
cmd.CommandType = CommandType.StoredProcedure; 
DataTable dt = new DataTable("treeProgram"); 
SqlDataAdapter dataAdp = new SqlDataAdapter(cmd); 
dataAdp.Fill(dt); 
DataSet ds = new DataSet(); 
ds.Tables.Add(dt); 
ds.Relations.Add("rsParentChild", ds.Tables["treeProgram"].Columns["program_id"], ds.Tables["treeProgram"].Columns["program_header_id"]); 
tvMain.ItemsSource = ds.Tables["treeProgram"].DefaultView; 

而XAML:

<TreeView Name="tvMain" Grid.Row="2"> 
    <TreeView.ItemTemplate> 
     <HierarchicalDataTemplate ItemsSource="{Binding rsParentChild}"> 
      <TextBlock Text="{Binding original_title}" /> 
     </HierarchicalDataTemplate> 
    </TreeView.ItemTemplate> 
</TreeView> 

現在,樹視圖就像這樣被填充:

- Game of Thrones 
     - Saison 1 
      - Episode 1 
      - Episode 2 
      - Episode 3 
      - Episode 4 
     - Saison 2 
      - Episode 1 
      - Episode 2 
     - Saison 3 
      - Episode 1 
- Saison 1 
    - Episode 1 
    - Episode 2 
    - Episode 3 
    - Episode 4 
- Saison 2 
    - Episode 1 
    - Episode 2 
- Saison 3 
- Episode 1 
- Episode 1 
- Episode 2 
- Episode 3 
- Episode 4 
- Episode 1 
- Episode 2 
- Episode 1 

樹形視圖複製所有數據.... :-( 你有一個想法?

+0

這只是一個模糊的猜想,但是如果您已經在Designer中手動設置了DataSet,然後再使用代碼執行它,則可能會發生這樣的問題。 –

+0

你的季節和劇集仍然在'rsParentChild'中。通過'ds.Relations'你得到正確的樹,但是這並不妨礙你在主樹中顯示季節和情節。我對「DataSets」和「DataTables」一無所知,所以我沒有解決方案。 –

回答

0

我找到解決方案

SqlCommand cmd; 
cmd = new SqlCommand("S_fiction_program_search_v3", mycon); 
cmd.CommandType = CommandType.StoredProcedure; 
DataTable dt = new DataTable("treeProgram"); 
SqlDataAdapter dataAdp = new SqlDataAdapter(cmd); 
dataAdp.Fill(dt); 
DataSet ds = new DataSet(); 
ds.Tables.Add(dt); 
ds.Relations.Add("rsParentChild", ds.Tables["treeProgram"].Columns["program_id"], ds.Tables["treeProgram"].Columns["program_header_id"]); 
ds.Tables["treeProgram"].DefaultView.RowFilter = "program_header_id is null"; 
tvMain.ItemsSource = ds.Tables["treeProgram"].DefaultView; 

ds.Tables [ 「treeProgram」] DefaultView.RowFilter = 「program_header_id爲空」。是神奇的線路!