C#WPF)在DataGrid上滚动太慢[关闭]

问题描述 投票:-1回答:1

我有一个很小的纯文本数据表(10列50行),它绑定到如下所示的DataGrid。

dataGrid_RxDispensedList.ItemsSource = Rx_dispensed_list_dt.DefaultView;

[我的DataGrid仅显示7列和30行,这意味着其余20行必须通过垂直滚动显示,其余3列被隐藏(禁用水平滚动)

我的Datatable(DataGrid)包含非常小的纯文本数据,但是滚动速度太慢了。

我已经检查了一些线程并尝试了类似的建议,

  1. ScrollViewer.IsDeferredScrollingEnabled =“ True”
  2. 删除ScrollViewer(仅使用DataGrid)
  3. CanContentScroll = true

但是没有运气就输了。

任何友好的建议,将不胜感激!

系统环境-

Windows10 64位,8 GB RAM,.NET Framework 4.5.2

我的xaml代码是,

<ScrollViewer VerticalScrollBarVisibility="Auto" CanContentScroll="True" Cursor="Hand" UseLayoutRounding="True" Margin="10,69,0,0">
            <DataGrid x:Name="dataGrid_RxDispensedList" ScrollViewer.IsDeferredScrollingEnabled="True" HorizontalAlignment="Left" Margin="0" VerticalAlignment="Top" Height="507" Width="709" IsHitTestVisible="False" IsEnabled="False" HorizontalScrollBarVisibility="Disabled" UseLayoutRounding="True" IsReadOnly="True" AutoGenerateColumns="False" CanUserReorderColumns="False" CanUserResizeColumns="False" CanUserResizeRows="False" BorderThickness="0" PreviewKeyUp="DataGrid_RxDispensedList_PreviewKeyUp" PreviewKeyDown="DataGrid_RxDispensedList_PreviewKeyDown" PreviewTouchUp="DataGrid_RxDispensedList_PreviewTouchUp">
                <DataGrid.Effect>
                    <DropShadowEffect/>
                </DataGrid.Effect>
                <DataGrid.Resources>
                    <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="#FFFDFD0A"/>
                    <SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Black"/>
                    <SolidColorBrush x:Key="{x:Static SystemColors.InactiveSelectionHighlightBrushKey}" Color="#FFFDFD0A"/>
                </DataGrid.Resources>
                <DataGrid.Columns>
                    <DataGridTextColumn Binding="{Binding Rx_Id}" Header="No." Width="37">
                        <DataGridTextColumn.ElementStyle>
                            <Style TargetType="{x:Type TextBlock}">
                                <Setter Property="VerticalAlignment" Value="Center"/>
                                <Setter Property="TextAlignment" Value="Center"/>
                            </Style>
                        </DataGridTextColumn.ElementStyle>
                        <DataGridTextColumn.HeaderStyle>
                            <Style TargetType="{x:Type DataGridColumnHeader}">
                                <Setter Property="HorizontalContentAlignment" Value="Center" />
                            </Style>
                        </DataGridTextColumn.HeaderStyle>
                    </DataGridTextColumn>
                    <DataGridTextColumn Binding="{Binding patientid, StringFormat='{}{0:0,0}'}" Header="고객 ID" Width="55">
                        <DataGridTextColumn.ElementStyle>
                            <Style TargetType="{x:Type TextBlock}">
                                <Setter Property="VerticalAlignment" Value="Center"/>
                                <Setter Property="TextAlignment" Value="Right"/>
                                <Setter Property="Padding" Value="0,0,7,0"/>
                            </Style>
                        </DataGridTextColumn.ElementStyle>
                        <DataGridTextColumn.HeaderStyle>
                            <Style TargetType="{x:Type DataGridColumnHeader}">
                                <Setter Property="HorizontalContentAlignment" Value="Center" />
                            </Style>
                        </DataGridTextColumn.HeaderStyle>
                    </DataGridTextColumn>
                    <DataGridTextColumn Binding="{Binding patientname}" Header="고객명" Width="72">
                        <DataGridTextColumn.ElementStyle>
                            <Style TargetType="{x:Type TextBlock}">
                                <Setter Property="TextTrimming" Value="CharacterEllipsis"/>
                                <Setter Property="VerticalAlignment" Value="Center"/>
                                <Setter Property="TextAlignment" Value="Center"/>
                                <Setter Property="ToolTip" Value="{Binding Text, RelativeSource={RelativeSource Self}}"/>
                            </Style>
                        </DataGridTextColumn.ElementStyle>
                        <DataGridTextColumn.HeaderStyle>
                            <Style TargetType="{x:Type DataGridColumnHeader}">
                                <Setter Property="HorizontalContentAlignment" Value="Center" />
                            </Style>
                        </DataGridTextColumn.HeaderStyle>
                    </DataGridTextColumn>
                    <DataGridTextColumn Binding="{Binding age}" Header="나이" Width="37">
                        <DataGridTextColumn.ElementStyle>
                            <Style TargetType="{x:Type TextBlock}">
                                <Setter Property="VerticalAlignment" Value="Center"/>
                                <Setter Property="TextAlignment" Value="Center"/>
                            </Style>
                        </DataGridTextColumn.ElementStyle>
                        <DataGridTextColumn.HeaderStyle>
                            <Style TargetType="{x:Type DataGridColumnHeader}">
                                <Setter Property="HorizontalContentAlignment" Value="Center" />
                            </Style>
                        </DataGridTextColumn.HeaderStyle>
                    </DataGridTextColumn>
                    <DataGridTextColumn Binding="{Binding gender}" Header="성별" Width="32">
                        <DataGridTextColumn.ElementStyle>
                            <Style TargetType="{x:Type TextBlock}">
                                <Setter Property="VerticalAlignment" Value="Center"/>
                                <Setter Property="TextAlignment" Value="Center"/>
                            </Style>
                        </DataGridTextColumn.ElementStyle>
                        <DataGridTextColumn.HeaderStyle>
                            <Style TargetType="{x:Type DataGridColumnHeader}">
                                <Setter Property="HorizontalContentAlignment" Value="Center" />
                            </Style>
                        </DataGridTextColumn.HeaderStyle>
                    </DataGridTextColumn>
                    <DataGridTextColumn Binding="{Binding birthyearmonthday}" Header="생년월일" Width="69">
                        <DataGridTextColumn.ElementStyle>
                            <Style TargetType="{x:Type TextBlock}">
                                <Setter Property="VerticalAlignment" Value="Center"/>
                                <Setter Property="TextAlignment" Value="Center"/>
                            </Style>
                        </DataGridTextColumn.ElementStyle>
                        <DataGridTextColumn.HeaderStyle>
                            <Style TargetType="{x:Type DataGridColumnHeader}">
                                <Setter Property="HorizontalContentAlignment" Value="Center" />
                            </Style>
                        </DataGridTextColumn.HeaderStyle>
                    </DataGridTextColumn>
                    <DataGridTextColumn Binding="{Binding nameofhospital}" Header="처방의료기관명" Width="123">
                        <DataGridTextColumn.ElementStyle>
                            <Style TargetType="{x:Type TextBlock}">
                                <Setter Property="TextTrimming" Value="CharacterEllipsis"/>
                                <Setter Property="VerticalAlignment" Value="Center"/>
                                <Setter Property="TextAlignment" Value="Center"/>
                                <Setter Property="ToolTip" Value="{Binding Text, RelativeSource={RelativeSource Self}}"/>
                            </Style>
                        </DataGridTextColumn.ElementStyle>
                        <DataGridTextColumn.HeaderStyle>
                            <Style TargetType="{x:Type DataGridColumnHeader}">
                                <Setter Property="HorizontalContentAlignment" Value="Center" />
                            </Style>
                        </DataGridTextColumn.HeaderStyle>
                    </DataGridTextColumn>
                    <DataGridTextColumn Binding="{Binding nameofdoctor}" Header="처방의명" Width="65">
                        <DataGridTextColumn.ElementStyle>
                            <Style TargetType="{x:Type TextBlock}">
                                <Setter Property="TextTrimming" Value="CharacterEllipsis"/>
                                <Setter Property="VerticalAlignment" Value="Center"/>
                                <Setter Property="TextAlignment" Value="Center"/>
                            </Style>
                        </DataGridTextColumn.ElementStyle>
                        <DataGridTextColumn.HeaderStyle>
                            <Style TargetType="{x:Type DataGridColumnHeader}">
                                <Setter Property="HorizontalContentAlignment" Value="Center" />
                            </Style>
                        </DataGridTextColumn.HeaderStyle>
                    </DataGridTextColumn>
                    <DataGridTextColumn Binding="{Binding paybypatient_convertedtoint_for_sorting, StringFormat='{}{0:#,0} 원'}" Header="받은 금액" Width="73">
                        <DataGridTextColumn.ElementStyle>
                            <Style TargetType="{x:Type TextBlock}">
                                <Setter Property="VerticalAlignment" Value="Center"/>
                                <Setter Property="TextAlignment" Value="Right"/>
                            </Style>
                        </DataGridTextColumn.ElementStyle>
                        <DataGridTextColumn.HeaderStyle>
                            <Style TargetType="{x:Type DataGridColumnHeader}">
                                <Setter Property="HorizontalContentAlignment" Value="Center" />
                            </Style>
                        </DataGridTextColumn.HeaderStyle>
                    </DataGridTextColumn>
                    <DataGridTextColumn Binding="{Binding totalcost_convertedtoint_for_sorting, StringFormat='{}{0:#,0} 원'}" Header="총 약제비" Width="79">
                        <DataGridTextColumn.ElementStyle>
                            <Style TargetType="{x:Type TextBlock}">
                                <Setter Property="VerticalAlignment" Value="Center"/>
                                <Setter Property="TextAlignment" Value="Right"/>
                            </Style>
                        </DataGridTextColumn.ElementStyle>
                        <DataGridTextColumn.HeaderStyle>
                            <Style TargetType="{x:Type DataGridColumnHeader}">
                                <Setter Property="HorizontalContentAlignment" Value="Center" />
                            </Style>
                        </DataGridTextColumn.HeaderStyle>
                    </DataGridTextColumn>
                    <DataGridTextColumn Binding="{Binding howlongday_rx, StringFormat={}{0} 일}" Header="일수" Width="65">
                        <DataGridTextColumn.ElementStyle>
                            <Style TargetType="{x:Type TextBlock}">
                                <Setter Property="VerticalAlignment" Value="Center"/>
                                <Setter Property="TextAlignment" Value="Right"/>
                                <Setter Property="Padding" Value="0,0,21,0"/>
                            </Style>
                        </DataGridTextColumn.ElementStyle>
                        <DataGridTextColumn.HeaderStyle>
                            <Style TargetType="{x:Type DataGridColumnHeader}">
                                <Setter Property="HorizontalContentAlignment" Value="Center" />
                            </Style>
                        </DataGridTextColumn.HeaderStyle>
                    </DataGridTextColumn>
                    <DataGridTextColumn Binding="{Binding only_for_keyboardfocus}" Header="키보드" Width="72">
                        <DataGridTextColumn.ElementStyle>
                            <Style TargetType="{x:Type TextBlock}">
                                <Setter Property="VerticalAlignment" Value="Center"/>
                                <Setter Property="TextAlignment" Value="Right"/>
                                <Setter Property="Padding" Value="0,0,0,0"/>
                            </Style>
                        </DataGridTextColumn.ElementStyle>
                        <DataGridTextColumn.HeaderStyle>
                            <Style TargetType="{x:Type DataGridColumnHeader}">
                                <Setter Property="HorizontalContentAlignment" Value="Center" />
                            </Style>
                        </DataGridTextColumn.HeaderStyle>
                    </DataGridTextColumn>
                </DataGrid.Columns>
                <DataGrid.RowStyle>
                    <Style TargetType="{x:Type DataGridRow}">
                        <EventSetter Event="MouseDoubleClick" Handler="RxDispensedListdataGrid_MouseDoubleClick"/>
                        <Setter Property="Background" Value="White"/>
                        <Setter Property="FontWeight" Value="Normal"/>
                        <Style.Triggers>
                            <Trigger Property="IsMouseOver" Value="True">
                                <Setter Property="Background" Value="#FF5DAC34"/>
                            </Trigger>
                            <Trigger Property="IsSelected" Value="True">
                                <Setter Property="BorderBrush" Value="Black" />
                                <Setter Property="BorderThickness" Value="0" />
                            </Trigger>
                        </Style.Triggers>
                    </Style>
                </DataGrid.RowStyle>
                <DataGrid.CellStyle>
                    <Style TargetType="{x:Type DataGridCell}">
                        <Setter Property="Padding" Value="3,0,2,0"/>
                        <Setter Property="Template">
                            <Setter.Value>
                                <ControlTemplate TargetType="{x:Type DataGridCell}">
                                    <Border Padding="{TemplateBinding Padding}" BorderBrush="{TemplateBinding BorderBrush}" Background="{TemplateBinding Background}" SnapsToDevicePixels="True">
                                        <ContentPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
                                    </Border>
                                </ControlTemplate>
                            </Setter.Value>
                        </Setter>
                    </Style>
                </DataGrid.CellStyle>
            </DataGrid>
        </ScrollViewer>
c# wpf scroll datagrid
1个回答
1
投票

为了提高DataGrid的性能,

  1. 通过设置DataGrid的以下属性在DataGrid中启用虚拟化:VirtualizingStackPanel.VirtualizationMode="Standard"VirtualizingStackPanel.IsVirtualizing="true"EnableColumnVirtualization = true EnableRowVirtualization = true
  2. 将您的集合绑定到DataGrid集ItemSourceIsAsync="True"属性,例如ItemsSource="{Binding MyStuff, IsAsync=True}"
  3. 切勿将DataGrid放在ScrollViewer中,因为实质上会丢失虚拟化。

尝试所有这些。希望对您有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.