Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 嵌套数据网格工作_C#_Wpf_Wpfdatagrid - Fatal编程技术网

C# 嵌套数据网格工作

C# 嵌套数据网格工作,c#,wpf,wpfdatagrid,C#,Wpf,Wpfdatagrid,Hi Iam使用嵌套数据网格,以下是其定义, 这是输出的屏幕截图 在上图中,我有两个数据网格。如果单击outergrid的任何一行,将显示相应的innergrid。现在,我不知道如何处理此事件以及显示相应的内部网格数据 这是Iam将我的datagrid绑定到的类结构 class MyClass { public string Col1{ get; set; } public string Col2{ get; set; } public

Hi Iam使用嵌套数据网格,以下是其定义, 这是输出的屏幕截图

在上图中,我有两个数据网格。如果单击outergrid的任何一行,将显示相应的innergrid。现在,我不知道如何处理此事件以及显示相应的内部网格数据

这是Iam将我的datagrid绑定到的类结构

class MyClass
    {
        public string Col1{ get; set; }
        public string Col2{ get; set; }
        public string Col3{ get; set; }
        public string Col4{ get; set; }
        public string Col5{ get; set; }
        public ObservableCollection<InnerObject> inner_object{ get; set; }
    }

class InnerObject
{
    public string EventName { get; set; }
    public string Date { get; set; }
    public string Time { get; set; }
    public string Message { get; set; }
    public int RIndex { get; set; }
}
<DataGrid
        x:Name="objDatagrid"
        ItemsSource="{Binding DataView}"
        CanUserAddRows="False"
        CanUserDeleteRows="False"
        AutoGenerateColumns="False"
        BorderBrush="Gray"
            >
            <DataGrid.RowStyle>
                <Style TargetType="{x:Type DataGridRow}">
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding TDate}" Value="">
                            <Setter Property="Visibility" Value="Collapsed"/>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </DataGrid.RowStyle>
            <DataGrid.RowDetailsTemplate >
                <DataTemplate>


                        <DataGrid
            x:Name="objInnerDatagrid"
            IsReadOnly="True"
            ItemsSource="{Binding ElementName=objDatagrid, Path=SelectedItem.inner_object}"> 
                            <DataGrid.RowStyle>
<Style TargetType="{x:Type DataGridRow}">
                                    <Style.Triggers>
                                        <DataTrigger Binding="{Binding Date}" Value="">
                                            <Setter Property="Visibility" Value="Collapsed"/>
                                        </DataTrigger>
                                    </Style.Triggers>
                                </Style>
                            </DataGrid.RowStyle>
                            <DataGrid.Columns>
                            </DataGrid.Columns>
                        </DataGrid>
                </DataTemplate>
            </DataGrid.RowDetailsTemplate>
            <DataGrid.Columns>
                <DataGridTextColumn Header="Col1" Width="SizeToHeader" Binding="{Binding Col1}" IsReadOnly="True"/>
                <DataGridTextColumn Header="Col2" Width="80" Binding="{Binding Col2}" IsReadOnly="True"/>
                <DataGridTextColumn Header="Col3" Width="80" Binding="{Binding Col3}" IsReadOnly="True"/>
                <DataGridTextColumn Header="Col4" Width="120" Binding="{Binding Col4}" IsReadOnly="True"/>
                <DataGridTextColumn Header="Col5" Width="100" Binding="{Binding Col5}" IsReadOnly="True"/>
            </DataGrid.Columns>
        </DataGrid>
class-MyClass
{
公共字符串Col1{get;set;}
公共字符串Col2{get;set;}
公共字符串Col3{get;set;}
公共字符串Col4{get;set;}
公共字符串Col5{get;set;}
公共ObservableCollection内部对象{get;set;}
}
类内部对象
{
公共字符串EventName{get;set;}
公共字符串日期{get;set;}
公共字符串时间{get;set;}
公共字符串消息{get;set;}
公共int-RIndex{get;set;}
}
我是WPF的新手。有人能给我解释一下上面的代码和它的工作原理吗? 这将是一个很大的帮助。 提前感谢。

定义显示详细信息行的时间和显示内容

默认情况下,如果定义了RowDetailsTemplate,则为选定行显示“行详细信息”部分

它之所以有效,是因为您将内部
DataGrid.ItemsSource
绑定到
SelectedItem
Internal\u对象
——在您的例子中是
MyClass
——的
objDatagrid
控件

ItemsSource="{Binding ElementName=objDatagrid, Path=SelectedItem.inner_object}">
然而,这有一个潜在的问题。它将始终绑定到第一个选定项目,而不是您当前打开的项目。例如,当
DataGrid.RowDetailsVisibilityMode=Visible
时,所有详细信息将指向相同的项目选择。由于包含行详细信息的每一行的
DataContext
都将被设置为
MyClass
的一个实例,因此您只需执行以下操作:

ItemsSource="{Binding Path=inner_object}">
在内部的
数据网格上

定义何时显示详细信息行,并定义显示的内容

默认情况下,如果定义了RowDetailsTemplate,则为选定行显示“行详细信息”部分

它之所以有效,是因为您将内部
DataGrid.ItemsSource
绑定到
SelectedItem
Internal\u对象
——在您的例子中是
MyClass
——的
objDatagrid
控件

ItemsSource="{Binding ElementName=objDatagrid, Path=SelectedItem.inner_object}">
然而,这有一个潜在的问题。它将始终绑定到第一个选定项目,而不是您当前打开的项目。例如,当
DataGrid.RowDetailsVisibilityMode=Visible
时,所有详细信息将指向相同的项目选择。由于包含行详细信息的每一行的
DataContext
都将被设置为
MyClass
的一个实例,因此您只需执行以下操作:

ItemsSource="{Binding Path=inner_object}">

在内部
数据网格上

正如您在代码中已经看到的那样,
行详细信息模板
显示内部网格。显示行详细信息的默认行为是当有人选择父行时

如果您希望覆盖此行为(例如,您希望双击或其他方式显示详细信息数据网格),那么您可能必须执行一些代码隐藏工作

有关更多详细信息,请参阅此帖子


正如您已经在代码中看到的那样,
行详细信息模板
显示内部网格。显示行详细信息的默认行为是当有人选择父行时

如果您希望覆盖此行为(例如,您希望双击或其他方式显示详细信息数据网格),那么您可能必须执行一些代码隐藏工作

有关更多详细信息,请参阅此帖子


非常感谢。你的链接起了作用。我只是想知道,我能用所有这些RowDetailsTemplate以编程方式创建相同的datagrid结构吗?非常感谢。你的链接起了作用。我只是想知道,我能用所有这些RowDetailsTemplate以编程方式创建相同的datagrid结构吗谢谢你的详细解释。我只是想知道,我能用所有这些RowDetailsTemplate以编程方式创建相同的datagrid结构吗?你的意思是“…你所要做的就是:
ItemsSource=“{Binding internal_object}”>
”@mcalex yes。好的。非常感谢。现在修好了谢谢你这么详细的解释。我只是想知道,我能用所有这些RowDetailsTemplate以编程方式创建相同的datagrid结构吗?你的意思是“…你所要做的就是:
ItemsSource=“{Binding internal_object}”>
”@mcalex yes。好的。非常感谢。现在修好了