8,736
社区成员
发帖
与我相关
我的任务
分享
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 < 100; 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;
}
private void Expander_Expanded(object sender, RoutedEventArgs e)
{
DataGridRow row = FindVisualParent<DataGridRow>(sender as Expander);
if (row != null) row.DetailsVisibility = System.Windows.Visibility.Visible;
}
private void Expander_Collapsed(object sender, RoutedEventArgs e)
{
DataGridRow row = FindVisualParent<DataGridRow>(sender as Expander);
if (row != null) row.DetailsVisibility = System.Windows.Visibility.Collapsed;
}
public T FindVisualParent<T>(DependencyObject child) where T : DependencyObject
{
DependencyObject parentObject = VisualTreeHelper.GetParent(child);
if (parentObject == null) return null;
T parent = parentObject as T;
if (parent != null)
return parent;
else
return FindVisualParent<T>(parentObject);
}
}
}
<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" RowDetailsVisibilityMode="Collapsed">
<DataGrid.Columns>
<DataGridTemplateColumn Width="Auto">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Expander Expanded="Expander_Expanded" Collapsed="Expander_Collapsed"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Header="ID值" IsReadOnly="True" Width="auto" Binding="{Binding questionID}" />
<DataGridTextColumn Header="题目" IsReadOnly="True" Width="500" Binding="{Binding questionName}" />
</DataGrid.Columns>
<DataGrid.RowDetailsTemplate >
<DataTemplate >
<DataGrid ItemsSource="{Binding choseItems}" AutoGenerateColumns="False"
Margin="30,20,0,20" RowDetailsVisibilityMode="Collapsed">
<DataGrid.Columns>
<DataGridTemplateColumn Width="Auto">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Expander Expanded="Expander_Expanded" Collapsed="Expander_Collapsed"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Header="选项名" Binding="{Binding ChoseName}" />
<DataGridTextColumn Header="选项内容举例" Binding="{Binding ChoseContent}"/>
</DataGrid.Columns>
<DataGrid.RowDetailsTemplate >
<DataTemplate >
<Label Content="提示" />
</DataTemplate >
</DataGrid.RowDetailsTemplate >
</DataGrid>
</DataTemplate>
</DataGrid.RowDetailsTemplate>
</DataGrid>
</Grid>
</Window>