WPF DataGrid详细列表手动显示与隐藏

设置显示序号与折叠显示样式

xml 复制代码
<DataTemplate x:Key="dtNum">
    <Button BorderBrush="Transparent" Style="{x:Null}" Click="BtnRowDetail_ShowHideClick" FontSize="16" Background="Transparent">
        <StackPanel Orientation="Horizontal">
            <TextBlock x:Name="tag" Text="﹣"/>
            <!--注意此处绑定查询数据行序号值-->
            <TextBlock Text="{Binding rownum}"/>
        </StackPanel>
    </Button>
</DataTemplate>

设置DataGrid详细列表

xml 复制代码
<DataGrid ItemsSource="{Binding}"
          AutoGenerateColumns="False" IsReadOnly="True" 
          GridLinesVisibility="All"
          SelectionUnit="FullRow"
          RowDetailsVisibilityMode="Visible"
          ScrollViewer.CanContentScroll="False"
          AlternatingRowBackground="LightBlue"
          VerticalGridLinesBrush="{DynamicResource {x:Static SystemColors.MenuHighlightBrushKey}}"
          LoadingRowDetails="dgDetail_LoadingDetails"
          ColumnHeaderStyle="{StaticResource HeaderStyle}">
    <DataGrid.Columns>
        <!--关联详细列表隐藏样式-->
        <DataGridTemplateColumn Header="#" Width="Auto" MinWidth="60" CellTemplate="{StaticResource dtNum}"/>
        <DataGridTextColumn Header="id" Binding="{Binding Path=id}" Width="Auto" Visibility="Hidden"/>
        <DataGridTextColumn Header="工装编号" Binding="{Binding Path=gz_code}" Width="Auto" MinWidth="100"/>
        <DataGridTextColumn Header="表芯编号" TextBlock.TextAlignment="Center" Binding="{Binding Path=chip_code}" Width="Auto" MinWidth="100"/>
        <DataGridTemplateColumn Header="合格" Width="100" CellTemplate="{StaticResource dtJudge}"/>
        <DataGridTextColumn Header="时间" Binding="{Binding Path=time, StringFormat='yyyy年MM月dd日 HH:mm:ss'}" Width="*"/>
    </DataGrid.Columns>
    <DataGrid.RowDetailsTemplate>
        <DataTemplate>
            <DataGrid
              ItemsSource="{Binding}"
              AutoGenerateColumns="False" IsReadOnly="True" 
              GridLinesVisibility="All"
              SelectionUnit="FullRow"
              ScrollViewer.CanContentScroll="False"
              AlternatingRowBackground="LightBlue"
              Margin="20 0 0 0"
              VerticalGridLinesBrush="{DynamicResource {x:Static SystemColors.MenuHighlightBrushKey}}"
              PreviewMouseWheel="DataGridDetail_PreviewMouseWheel"
              ColumnHeaderStyle="{StaticResource HeaderStyle}">
                <DataGrid.Columns>
                    <DataGridTextColumn Header="#" Binding="{Binding rownum}"  Width="Auto" MinWidth="40"/>
                    <DataGridTextColumn Header="id" Binding="{Binding Path=id}" Width="Auto" Visibility="Hidden"/>
                    <DataGridTextColumn Header="角度(°)" Binding="{Binding Path=angle, StringFormat={}{0:F0}}" Width="100"/>
                    <DataGridTextColumn Header="电压(mv)" Binding="{Binding Path=voltage, StringFormat={}{0:F4}}" Width="100"/>
                    <DataGridTemplateColumn Header="合格" Width="100" CellTemplate="{StaticResource dtJudge}"/>
                    <DataGridTextColumn Header="时间" Binding="{Binding Path=time, StringFormat='yyyy年MM月dd日 HH:mm:ss'}" Width="*"/>
                </DataGrid.Columns>
            </DataGrid>
        </DataTemplate>
    </DataGrid.RowDetailsTemplate>
</DataGrid>

详细列表鼠标滚轮支持后台代码

csharp 复制代码
private void DataGridDetail_PreviewMouseWheel(object sender, MouseWheelEventArgs e)
{
    var eventArg = new MouseWheelEventArgs(e.MouseDevice, e.Timestamp, e.Delta)
    {
        RoutedEvent = MouseWheelEvent,
        Source = sender
    };
    (sender as DataGrid).RaiseEvent(eventArg);
}

行详细信息显示后台代码

csharp 复制代码
private void BtnRowDetail_ShowHideClick(object sender, RoutedEventArgs e)
{
    var obj = sender as DependencyObject;
    var tb = obj.FindChild<TextBlock>("tag");
    if (null == tb) return;

    while (obj != null && !(obj is DataGridRow))
    {
        obj = VisualTreeHelper.GetParent(obj);
    }

    DataGridRow row = obj as DataGridRow;
    if (null == row) return;

    if (tb.Text.IndexOf("﹣") > -1)
    {
        row.DetailsVisibility = Visibility.Collapsed;
        tb.Text = "﹢";
    } else
    {
        row.DetailsVisibility = Visibility.Visible;
        tb.Text = "﹣";
    }
}

数据显示效果

相关推荐
聆风吟º15 小时前
CANN hccl 深度解析:异构计算集群通信库的跨节点通信与资源管控实现逻辑
人工智能·wpf·transformer·cann
无心水1 天前
分布式定时任务与SELECT FOR UPDATE:从致命陷阱到优雅解决方案(实战案例+架构演进)
服务器·人工智能·分布式·后端·spring·架构·wpf
LZL_SQ1 天前
HCCL测试框架中AllReduce边界条件测试设计深度剖析
wpf·cann
User_芊芊君子2 天前
【分布式训练】CANN SHMEM跨设备内存通信库:构建高效多机多卡训练的关键组件
分布式·深度学习·神经网络·wpf
就是有点傻3 天前
WPF按钮走马灯效果
wpf
zuozewei3 天前
虚拟电厂聚合商平台安全技术体系深度解读
安全·wpf
极客智造3 天前
WPF 自定义控件:AutoGrid 实现灵活自动布局的网格控件
wpf
极客智造3 天前
WPF Grid 布局高效扩展:GridHelpers 附加属性工具类全解析
wpf
张人玉3 天前
WPF 多语言实现完整笔记(.NET 4.7.2)
笔记·.net·wpf·多语言实现·多语言适配
暖馒3 天前
深度剖析串口通讯(232/485)
开发语言·c#·wpf·智能硬件