WPF之DataGrid点击行展开和隐藏行细节

版权声明:转载请注明出处 https://blog.csdn.net/lcpskk/article/details/82431855
public partial class SourceAllocateReportView : ClientPluginBase
    {
        private SourceAllocateReportVM vm = new SourceAllocateReportVM();
        public SourceAllocateReportView()
        {
            InitializeComponent();
            this.DataContext = vm;
        }

        /// <summary>
        /// 细节行高度宽度设置
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void mainDataGrid_LoadingRowDetails(object sender, DataGridRowDetailsEventArgs e)
        {
            DataGridRow row = e.Row;
            if (row != null)
            {
                //row.Background = new SolidColorBrush(Color.FromRgb(210,221,247));
                if (e.DetailsElement != null && e.DetailsElement.FindChild<MetroDataGrid>("detailGrid") != null)
                {
                    MetroDataGrid grid = e.DetailsElement.FindChild<MetroDataGrid>("detailGrid") as MetroDataGrid;
                    if (grid != null)
                    {
                        grid.Background = new SolidColorBrush(Color.FromRgb(210, 221, 247));
                        e.DetailsElement.Height = 30 * grid.Items.Count;
                        foreach (var col in grid.Columns)
                        {
                            var find = this.mainDataGrid.Columns.FirstOrDefault(p => p.Header.ToString() == col.Header.ToString());
                            if (find != null)
                            {
                                Binding widthBd = new Binding();
                                widthBd.Source = find;
                                widthBd.Mode = BindingMode.TwoWay;
                                widthBd.Path = new PropertyPath(DataGridColumn.WidthProperty);
                                BindingOperations.SetBinding(col, DataGridTextColumn.WidthProperty, widthBd);
                                //col.Width = find.ActualWidth;
                            }
                            
                        }
                    }
                }
            }
        }

        /// <summary>
        /// 数据加载出来初始化设置
        /// </summary>
        private void mainDataGrid_LoadingRow(object sender, DataGridRowEventArgs e)
        {
            DataGridRow row = e.Row;
            if (row != null)
            {
                SourceAllocateReportModel model = row.Item as SourceAllocateReportModel;
                if (model != null && model.is_extend)
                {
                    row.DetailsVisibility = Visibility.Visible;
                }
                else
                {
                    row.DetailsVisibility = Visibility.Collapsed;
                }

                
            }
        }

        /// <summary>
        /// 点击缩放
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void mainDataGrid_PreviewMouseLeftButtonUp(object sender, MouseButtonEventArgs e)
        {
            DependencyObject dep = (DependencyObject)e.OriginalSource;
            while ((dep != null) && !(dep is DataGridCell) && !(dep is DataGridColumnHeader))
            {
                dep = VisualTreeHelper.GetParent(dep);
            }
            if (dep is DataGridCell)
            {
                while ((dep != null) && !(dep is DataGridRow))
                {
                    dep = VisualTreeHelper.GetParent(dep);
                }

                DataGridRow row = dep as DataGridRow;
                if (row != null)
                {
                    SourceAllocateReportModel model = row.Item as SourceAllocateReportModel;
                    if (model != null && model.assigned_qty != 0 && model.detailInfos != null)
                    {
                        if (row.DetailsVisibility == Visibility.Collapsed)
                        {
                            row.DetailsVisibility = Visibility.Visible;
                            model.is_extend = true;
                        }
                        else
                        {
                            row.DetailsVisibility = Visibility.Collapsed;
                            model.SelectedModelItem = null;
                            model.is_extend = false;

                        }
                    }

                }
            }
            

        }
    }

XAML:

<controls:MetroDataGrid Name="mainDataGrid"
                ColumnSetFileName="SourceAllocateReportColumnSet.xml"
                Grid.Row ="1" 
                ItemsSource="{Binding RetsultList}"                  
                IsReadOnly="True"
                                    
                AutoGenerateColumns="False" RowDetailsVisibilityMode="VisibleWhenSelected"
                                    LoadingRowDetails="mainDataGrid_LoadingRowDetails"
                                    LoadingRow="mainDataGrid_LoadingRow"
                                    PreviewMouseLeftButtonUp="mainDataGrid_PreviewMouseLeftButtonUp">
                <!--<DataGrid.RowStyle>
                    <Style  TargetType="DataGridRow">
                        <EventSetter Event="MouseUp" Handler="Item_MouseUp"/>
                    </Style>
                </DataGrid.RowStyle>-->


                <DataGrid.RowDetailsTemplate>
                    <DataTemplate>
                        <WrapPanel Name="detailPanel" Height="auto">
                            <controls:MetroDataGrid 
                                Name="detailGrid"
                                  HeadersVisibility="None"
                                  ItemsSource="{Binding detailInfos}"                  
                                  IsReadOnly="True" 
                                  AutoGenerateColumns="False"
                                Background="LightBlue"
                                >

                                <controls:MetroDataGrid.Columns>
                                    <DataGridTextColumn Header="产品" />
                                    <DataGridTextColumn Header="交易组" />
                                    <DataGridTextColumn Header="资产账户" />
                                    <DataGridTextColumn Header="证券代码" />
                                    <DataGridTextColumn Header="证券名称"  />
                                    <DataGridTextColumn Header="交易市场"  />
                                    <DataGridTextColumn Header="持仓数量"  />
                                    <DataGridTextColumn Header="持仓市值"  />
                                    <DataGridTextColumn Header="未分配券源数量" />
                                    <DataGridTextColumn Header="未分配券源市值" />
                                    <!-->分割线*******************************分割线<-->
                                    <DataGridTextColumn Header="操作员名称" Binding="{Binding opor_name}" />
                                    <DataGridTextColumn Header="已分配券源数量" Binding="{Binding source_stock_qty, StringFormat={}{0:N2}}" />
                                    <DataGridTextColumn Header="已分配券源市值" Binding="{Binding assign_value, StringFormat={}{0:N2}}" />
                                </controls:MetroDataGrid.Columns>
                            </controls:MetroDataGrid>
                        </WrapPanel>
                        
                        
                    </DataTemplate>
                </DataGrid.RowDetailsTemplate>
                
                <controls:MetroDataGrid.Columns>
                    <DataGridTextColumn Header="产品" Binding="{Binding pd_no, Converter={StaticResource DictConverter}, ConverterParameter=pd_no}" />
                    <DataGridTextColumn Header="交易组" Binding="{Binding exch_group_no, Converter={StaticResource DictConverter}, ConverterParameter=exch_group_no}" />
                    <DataGridTextColumn Header="资产账户" Binding="{Binding asset_acco_no, Converter={StaticResource DictConverter}, ConverterParameter=asset_acco_no}" />
                    <DataGridTextColumn Header="证券代码" Binding="{Binding stock_code_no, Converter={StaticResource DictConverter}, ConverterParameter=stock_code_no}" />
                    <DataGridTextColumn Header="证券名称" Binding="{Binding stock_code_no, Converter={StaticResource DictConverter}, ConverterParameter=stock_name}" />
                    <DataGridTextColumn Header="交易市场" Binding="{Binding exch_no, Converter={StaticResource DictConverter}, ConverterParameter=exch_no}" />
                    <DataGridTextColumn Header="持仓数量" Binding="{Binding src_qty_total, StringFormat={}{0:N2}}" />
                    <DataGridTextColumn Header="持仓市值" Binding="{Binding src_market_value, StringFormat={}{0:N2}}" />
                    <DataGridTextColumn Header="未分配券源数量" Binding="{Binding unassigned_qty, StringFormat={}{0:N2}}" />
                    <DataGridTextColumn Header="未分配券源市值" Binding="{Binding unassigned_value, StringFormat={}{0:N2}}" />
                    <DataGridTextColumn Header="操作员名称" Binding="{Binding oper_name}">
                    </DataGridTextColumn>
                    <DataGridTextColumn Header="已分配券源数量" Binding="{Binding assigned_qty, StringFormat={}{0:N2}}" />
                    <DataGridTextColumn Header="已分配券源市值" Binding="{Binding assigned_value, StringFormat={}{0:N2}}" />
                </controls:MetroDataGrid.Columns>
            </controls:MetroDataGrid>

细节行模板自定义为一个DataGrid,和父行共享绑定数据item,绑定item的详细数据。效果如下图:

猜你喜欢

转载自blog.csdn.net/lcpskk/article/details/82431855
今日推荐