wpf datagrid 主从表关联查询

<Page x:Class="-----"
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      xmlns:local="clr-namespace:InterfaceSimulator.Pages.His"
      xmlns:localVM="clr-namespace:InterfaceSimulator.ViewModel" 
      xmlns:hc="clr-namespace:HandyControl.Controls;assembly=HandyControl"
      xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"

      mc:Ignorable="d" 
      d:DesignHeight="450" d:DesignWidth="800"
      Title="PageHisRegRecordMain">

    <Page.DataContext>

        <localVM:ViewModelRegRecord/>

    </Page.DataContext>


    <Grid>

        <Grid.RowDefinitions>
            <RowDefinition Height="60" />
            <RowDefinition Height="160" />
            <RowDefinition Height="*" />
        </Grid.RowDefinitions>

        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>

        <!--查询区域-->
        <StackPanel Grid.Row="0" Grid.Column="0" VerticalAlignment="Center">

            <Grid>

                <Grid.RowDefinitions>
                    <RowDefinition Height="*" />
                    <RowDefinition Height="*" />
                </Grid.RowDefinitions>

                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="*"/>
                    <ColumnDefinition Width="80"/>
                    <ColumnDefinition Width="80"/>
                </Grid.ColumnDefinitions>

                <TextBox x:Name="txt_patientid"
                         Grid.Row="0" Grid.Column="0"
                         Text="{Binding Data.PatientID, Mode=TwoWay}"  
                         Style="{StaticResource TextBoxExtend}"
                         hc:InfoElement.TitleWidth="80" 
                         hc:InfoElement.TitlePlacement="Left" 
                         hc:InfoElement.Title="患者编号" 
                         hc:InfoElement.Necessary="True" 
                         hc:InfoElement.Placeholder="请输入患者编号"
                         Width="200" 
                         VerticalAlignment="Center"
                         HorizontalAlignment="Left"
                         ></TextBox>

            

                <Button Grid.Row="1" Grid.Column="2" Content="查询" 
                        Command="{Binding QueryCommand}"     
                        
                        Style="{StaticResource ButtonPrimary}" ></Button>
            </Grid>
        </StackPanel>


        <!--SelectedItem="{Binding Path=Data,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"-->

        <!--主表-->
        <DataGrid  x:Name="MasterGrid" Grid.Row="1" Grid.Column="1"  
                   ItemsSource="{Binding Path = DataList}" 
                   
                   AutoGenerateColumns="True"
                   HeadersVisibility="All" RowHeaderWidth="60" 
                   SelectionMode="Single"
                   SelectionUnit="FullRow"
                   >

            <DataGrid.RowHeaderTemplate>
                <DataTemplate>
                    <CheckBox IsChecked="{Binding IsSelected,RelativeSource={RelativeSource AncestorType=DataGridRow}}"/>
                </DataTemplate>
            </DataGrid.RowHeaderTemplate>

            <DataGrid.Columns>

                <DataGridTemplateColumn Width="Auto">

                </DataGridTemplateColumn>

            </DataGrid.Columns>
        
            <i:Interaction.Triggers>
                <i:EventTrigger EventName="SelectionChanged">
                    <i:InvokeCommandAction 
                        Command="{Binding OperationCommand}" 
                        CommandParameter="{Binding Path=SelectedItem, ElementName= MasterGrid }"
                                           />
                </i:EventTrigger>
            </i:Interaction.Triggers>
            
        </DataGrid>
        
        <!--子表-->
        <DataGrid  x:Name="DetailGrid" Grid.Row="2" Grid.Column="1"  
                   ItemsSource="{Binding Path = DetailDataList}" 
                   
                   AutoGenerateColumns="True"
                   HeadersVisibility="All" RowHeaderWidth="60" 
                   SelectionMode="Single"
                   SelectionUnit="FullRow"
                   >

            <DataGrid.RowHeaderTemplate>
                <DataTemplate>
                    <CheckBox IsChecked="{Binding IsSelected,RelativeSource={RelativeSource AncestorType=DataGridRow}}"/>
                </DataTemplate>
            </DataGrid.RowHeaderTemplate>

            <DataGrid.Columns>

                <DataGridTemplateColumn Width="Auto">

                </DataGridTemplateColumn>

            </DataGrid.Columns>
        </DataGrid>
    </Grid>
</Page>
 

---------------------------------------------

  private RelayCommand<object> operationCommand;
        public RelayCommand<object> OperationCommand
        {

            get
            {
                if (operationCommand == null)
                {
                    operationCommand = new RelayCommand<object>(new System.Action<object>(OperationData));
                }

                return operationCommand;
            }

            set
            {
                updateCommand = value;
            }


        }

  public override void OperationData(object param)
        {
            if (param != null)
            {
               

                var regFlow = (param as HisRegRecorder).RegFlow;
                this.DetailDataList =  dal.Query<HisRegTradeRecorder>().Where(t => t.RegFlow == regFlow).ToList();
            } 
        }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: WPF DataGrid复合头用于在格中显示多级标题。在DataGrid中,复合头可以以层次结构的方式组织和显示列标题,使用户更好地理解和管理格数据。 要创建复合头,我们可以使用DataGridTemplateColumn和HeaderTemplate属性。首先,我们需要定义一个复合头模板,其中包含多个层次结构的标题。可以使用StackPanel或Grid等容器控件来组织这些层次结构。 下面是一个示例,展示了如何创建一个具有两个层次结构的复合头: ```xaml <DataGrid> <DataGrid.Columns> <DataGridTemplateColumn> <DataGridTemplateColumn.HeaderTemplate> <DataTemplate> <Grid> <Grid.RowDefinitions> <RowDefinition /> <RowDefinition /> </Grid.RowDefinitions> <TextBlock Grid.Row="0" Text="第一级标题" /> <TextBlock Grid.Row="1" Text="第二级标题" /> </Grid> </DataTemplate> </DataGridTemplateColumn.HeaderTemplate> </DataGridTemplateColumn> </DataGrid.Columns> </DataGrid> ``` 上述示例中,我们创建了一个DataGridTemplateColumn,并将其HeaderTemplate属性设置为一个包含两个TextBlock的Grid。这样,第一级标题和第二级标题就以层次结构的方式显示在头中。 通过使用嵌套的容器控件和定义适当的布局,我们可以创建更复杂的多级标题结构。在实际使用中,我们可以根据需求进行自定义和扩展,以满足复杂格的显示需求。 总的来说,WPF DataGrid复合头提供了一种更灵活和直观的方式来管理和展示格数据,使用户能够更好地理解和操作数据。 ### 回答2: WPF DataGrid是一个强大的控件,允许我们通过使用复合头来组织和显示数据。复合头是指一个头下面有多个子头的情况。 要在WPF DataGrid中使用复合头,我们需要使用DataGrid的ColumnHeaderStyle属性来自定义头的样式。我们可以使用StackPanel控件来嵌套多个头,并设置每个头的样式和内容。 首先,我们需要创建一个StackPanel来作为根头。然后,我们可以使用TextBlock或其他控件来添加子头,并设置它们的样式和内容。我们可以使用Margin属性来设置每个子头之间的间距。 接下来,我们需要将StackPanel添加到DataGrid的ColumnHeaderStyle属性中。这样,每个列的头都会根据这个样式进行显示。 如果我们想要在复合头中显示具有层次结构的数据,可以使用HierarchicalDataTemplate来定义每个子头的内容。HierarchicalDataTemplate允许我们绑定嵌套的数据,并在子头中显示它们。 最后,我们可以根据需要自定义头的外观,比如设置颜色、字体等属性。我们可以使用Setter和Trigger来实现这些自定义样式。 总之,WPF DataGrid允许我们通过使用复合头来组织和显示数据。我们可以使用StackPanel来创建复合头,并使用ColumnHeaderStyle属性和HierarchicalDataTemplate来自定义头的样式和内容。通过这种方式,我们可以创建出功能强大且易于使用的数据格。 ### 回答3: WPF DataGrid是一种用于呈现和编辑数据的控件,它支持复合头。复合头是指格中的头可以跨越多列或多行,提供更灵活和复杂的布局。 要实现复合头,我们可以使用DataGrid的列合并功能。首先,在DataGrid的XAML代码中,我们可以定义多个DataGridTextColumn或其他类型的列,并为每个列设置相应的属性和样式。然后,我们可以在需要合并的列中使用DataGrid.ColumnHeaderStyle属性来设置合并样式。 可以通过设置DataGrid.ColumnHeaderStyle中的ContentTemplate属性来定义自定义头。在ContentTemplate中,我们可以使用Grid来创建一个包含多个单元格的布局。通过设置Grid的列或行的宽度和高度,我们可以控制头中每个单元格的大小和位置。还可以在每个单元格中添加文本或其他控件来自定义头的内容。 除了定义自定义头的布局,我们还可以使用DataGrid.ColumnHeaderStyle中的其他属性来设置头的外观,如前景色、背景色、字体样式等。这样,我们就能够创建出符合我们需求的复合头了。 在绑定数据时,我们只需要将数据源的属性与对应的格列进行绑定,DataGrid会自动将数据显示在格中。由于复合头的实现是基于DataGrid的列合并功能,因此绑定数据时并不需要额外的操作。 通过实现复合头,我们可以打造出专业而美观的数据展示界面,提高用户的数据浏览和编辑体验。同时,WPF DataGrid的强大功能和灵活性也使得复合头的实现变得简单而有效。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值