[WPF](小结2)DataGrid嵌套DataGrid(也叫主从表)

摘要:
DataGrid嵌套DataGrid(也叫主从表),效果为:单击表中某项后,从中间展开一个新表,总表绑定的是题目类大集合,从表绑定的是对应的选项集合.第一:选构建题目类,再建一个选项类,题目类集合中的每个项包含一个选项类集合,即数组嵌套数组,C#语句如下:(为方便看清语句,类直接写在主程序中)C#代码如下:usingSystem;usingSystem.Collections.Generic;us

[WPF](小结2)DataGrid嵌套DataGrid(也叫主从表)第1张

DataGrid嵌套DataGrid(也叫主从表),效果为:单击表中某项后,从中间展开一个新表,总表绑定的是题目类大集合,从表绑定的是对应的选项集合.
第一:选构建题目类,再建一个选项类,题目类集合中的每个项包含一个选项类集合,即数组嵌套数组,C#语句如下:
(为方便看清语句,类直接写在主程序中)
[WPF](小结2)DataGrid嵌套DataGrid(也叫主从表)第2张C#代码如下:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Windows;
usingSystem.Windows.Controls;
usingSystem.Windows.Data;
usingSystem.Windows.Documents;
usingSystem.Windows.Input;
usingSystem.Windows.Media;
usingSystem.Windows.Media.Imaging;
usingSystem.Windows.Navigation;
usingSystem.Windows.Shapes;
using System.Collections .ObjectModel ;//ObservableCollection命名空间
namespaceDataGridInDataGrid
{
    /// <summary>
    ///MainWindow.xaml 的交互逻辑
    /// </summary>
    public partial classMainWindow : Window
    {
        publicMainWindow()
        {
            InitializeComponent();
        }
                //题目类
        classquestion
        {
            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;
            }
        }
        //选项类
        classchoseItem
        {
            public string ChoseName//选项名,比如:A,B,C,D之类
            { get; set; }
            public string ChoseContent//选项内容
            { get; set; }
        }
        ObservableCollection<question> Questions = new ObservableCollection<question>();//题目数组
        private void Window_Loaded(objectsender, 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;
        }
    }
}

第二步:主界面的绑定语句如下:

[WPF](小结2)DataGrid嵌套DataGrid(也叫主从表)第3张[WPF](小结2)DataGrid嵌套DataGrid(也叫主从表)第4张主界面代码
<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值,要不然一点开会很突然,用户都搞不懂在显示什么,

免责声明:文章转载自《[WPF](小结2)DataGrid嵌套DataGrid(也叫主从表)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇在windows上使用nginx重定向目录访问远程服务器文件详细实例SqlServer性能急剧下降,查看所有会话的状态及等待类型---Latch_Ex下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

WPF MVVM实现数据增删改查逻辑全流程详细解析demo

界面总览 gitee 地址:WPFMVVM: 使用mvvm模拟实现数据增删改查 (gitee.com) 本例中包含两个View 界面:MainWindow.xaml 数据列表界面,StudentView.xaml数据新增编辑界面 本例使用了命令绑定MvvmLight RelayCommand模拟数据增删改查操作,适用于WPF入门阅读 效果如下:   程序代...

WPF中的图像处理简介

和Winform中的GDI+相比,WPF提供了一组新的API用于显示和编辑图像。新API特点如下: 适用于新的或专用图像格式的扩展性模型。 对包括位图 (BMP)、联合图像专家组 (JPEG)、可移植网络图形 (PNG)、标记图像文件格式 (TIFF)、Microsoft Windows Media 照片、图形交换格式 (GIF) 和图标 (.ico)...

EasyUI中DataGrid隔行改变背景颜色。

<table id="dg" class="easyui-datagrid" style=" 1000px; height: 300px" data-options=" rownumbers:true, onClickRow:ClickRow,...

周末充电之WPF(三 ) .后台动态生成控件

布局 -连连看: 代码: 1 private void Window_Loaded_1(object sender, RoutedEventArgs e) 2 { 3 4 5 //动态创建行 6 for (int i = 0; i < 10; i++...

WPF学习问题汇集:

WPF中ItemsSource改变,DataGrid中不更新 需要将ItemsSource先赋值为null,而后再赋值为新的值。 例如: gridBeamInfo.ItemsSource = null; if (beamInfoList.Count==0) { beamInf...

easyui datagrid分页要点总结

easyui的datagird插件比较好用,也很方便。网上也有很多热的网友贴出了使用代码,但是很少有网友指出在使用过程应该注意的地方,让我实在搞不清分页应该怎么使用。我就说下使用分页功能中要注意的一个小地方。 1、首先你的html得有个table标签 <table id="tt" ></table> 在js页面加载代码中$(docu...