
DataGrid嵌套DataGrid(也叫主從表),效果為:單擊表中某項后,從中間展開一個新表,總表綁定的是題目類大集合,從表綁定的是對應的選項集合.
第一:選構建題目類,再建一個選項類,題目類集合中的每個項包含一個選項類集合,即數組嵌套數組,C#語句如下:
(為方便看清語句,類直接寫在主程序中)
C#代碼如下:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using System.Collections .ObjectModel ;//ObservableCollection命名空間 namespace DataGridInDataGrid { /// <summary> /// MainWindow.xaml 的交互邏輯 /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } //題目類 class question { public Int32 questionID//題目ID號 { get; set; } public string questionName//題目名,比如:第1題或第2題等 { get; set; } public ObservableCollection<choseItem> choseItems//某題中"選項類"的集合,比如A-D { get; set; } public question(Int32 _id, string _questionname, ObservableCollection<choseItem> _choseitems)//構造函數 { questionID =_id ; questionName = _questionname; choseItems = _choseitems; } } //選項類 class choseItem { public string ChoseName//選項名,比如:A,B,C,D之類 { get; set; } public string ChoseContent//選項內容 { get; set; } } ObservableCollection<question> Questions = new ObservableCollection<question>();//題目數組 private void Window_Loaded(object sender, RoutedEventArgs e) { string[] CharStr = new string[4] { "A", "B", "C", "D" }; for (int i = 0; i < 5; i++) { ObservableCollection<choseItem> ChoseItems = new ObservableCollection<choseItem>();//選項數組 for (int j = 0; j < 4; j++) { choseItem item = new choseItem();//選項類 item.ChoseName = CharStr[j] + ":"; item.ChoseContent = "選項內容舉例..."; ChoseItems.Add(item); } Questions.Add(new question(i,"__第" + (i + 1).ToString() + "題", ChoseItems)); } datagrid1.ItemsSource = Questions; } } }
第二步:主界面的綁定語句如下:
主界面代碼
<Window x:Class="DataGridInDataGrid.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="DataGridInDataGrid" Height="350" Width="525" Loaded="Window_Loaded"> <Grid> <DataGrid AutoGenerateColumns="False" Name="datagrid1"> <DataGrid.Columns> <DataGridTextColumn Header="ID值" IsReadOnly="True" Width="auto" Binding="{Binding questionID}" /> <DataGridTextColumn Header="題目" IsReadOnly="True" Width="auto" Binding="{Binding questionName}" /> </DataGrid.Columns> <DataGrid.RowDetailsTemplate > <DataTemplate > <DataGrid ItemsSource="{Binding choseItems}" AutoGenerateColumns="False" Margin="30,20,0,20" Background="Green"> <DataGrid.Columns> <DataGridTextColumn Header="選項名" Binding="{Binding ChoseName}" /> <DataGridTextColumn Header="選項內容舉例" Binding="{Binding ChoseContent}"/> </DataGrid.Columns> </DataGrid> </DataTemplate> </DataGrid.RowDetailsTemplate> </DataGrid> </Grid> </Window>
第三:小結一下
1:表嵌套表也叫主從表,主要用到了DataGrid.RowDetailsTemplate 行詳細模板,
2:要注意被嵌套的表要設置好margin值,要不然一點開會很突然,用戶都搞不懂在顯示什么,
