دسته بندی ها
14:16 1401/06/12

کند بودن کمبوباکس ستونی هنگام باز شدن لیست آن در دیتاگرید WPF

مشخصات سوال کننده :
کاربر : mojtabahakimian     امتیاز کاربر : 155     رتبه کاربر : 10
دسته بندی : سی شارپ WPF

به این سوال امتیاز بدهید    0
تعداد بازدید این سوال : 1802
3 نظر
saedbfd : شما در هر کمبوباکس در هر سطر ۲۴۰۰۰ آیتم لود می کنید ؟

امتیاز کاربر : 1654   رتبه کاربر : 1   تاریخ ثبت : 02:58 1401/06/12
mojtabahakimian : نه یک Observable collection که محتواش لیست مشتریان هست (۲۴۰۰۰ تا نام مشتری) از اون میگیره

امتیاز کاربر : 155   رتبه کاربر : 10   تاریخ ثبت : 04:33 1401/06/12
saedbfd : خب پس یعنی داخل کمبوباکس لیست مشتریان هست دیگه ؟ که ۲۴۰۰۰ رکورد هست

امتیاز کاربر : 1654   رتبه کاربر : 1   تاریخ ثبت : 05:19 1401/06/12
ادامه نظرات ...
پاسخ دهنده : fateme 17:49 1401/06/12

اگر کند بودن در حد یک مکث یا leg هست که قابل چشم پوشی هست. اما اگر حالت هنگ به خودش میگیره باید ببینید کجا این هنگی به وجود می یاد. شما 2 جا رو با Breakpoint بررسی کنید. اول اون کوئری که اطلاعات رو از دیتابیس واکشی میکنه و درون متغیر میریزه و دوم اونجایی که داده های درون متغیر رو میخواید به DataSource بدید. اگر خود کوئری کند هست شاید بشه با ترفندهایی مثل استفاده از IEnumerable یا IQueryable سرعت رو بهبود داد.

فرق بین IEnumerable و IQueryable

اگر هم کندی وقتی هست که اطلاعات رو درون DataSource میریزید بنظرم بهتره همه اطلاعات رو از دیتابیس واکشی نکنید. مثلا میتونید فقط 100 تا رکورد رو واکشی کنید و قابلیت جستجو برای کاربر قرار بدید. چون مطمئنا کاربر همه اطلاعات رو یه جا نیازی نداره.

var query = _context.Customer_Tbl.ToList().Take(100);

 

به این پاسخ امتیاز بدهید    0
امتیاز: 1617 رتبه: 2
2 نظر
mojtabahakimian : مشکل از سمت دیتا ها نیست , مشکل نمایش خود کمبوباکس هست , اگر دقت کنید توی TemplateColumn گفتم که این مشکل حل شده اما توی حالت ستون مستقیم کمبوباکسی این مشکل رو داره و مربوط به نمایش اطلاعات هم میشه , چون عین همین دیتا ها رو با برنامه MS Access و دقیقان اونجاهم کمبوباکس تست کردم اوکی بود اما توی DataGridComboBoxColumn کنده !

امتیاز کاربر : 155   رتبه کاربر : 10   تاریخ ثبت : 08:11 1401/06/12
mojtabahakimian : دیتا ها حدود 1.5 سثانیه طول میکشه تا ObsevblaeCollection رو پر کنه

امتیاز کاربر : 155   رتبه کاربر : 10   تاریخ ثبت : 08:12 1401/06/12
پاسخ دهنده : mojtabahakimian 20:55 1401/06/12

دوستان راه حلش اینه : 

<Window.Resources>
  <ItemsPanelTemplate x:Key="VSP">
     <VirtualizingStackPanel IsVirtualizing="True" VirtualizationMode="Recycling"/>
  </ItemsPanelTemplate>
</Window.Resources>

و برای استفاده :


                <DataGridComboBoxColumn x:Name="COMP_COD" Width="220" Header=" تماس گیرنده "
                                        SelectedValueBinding="{Binding hes}" 
                                        DisplayMemberPath="NAME" 
                                        SelectedValuePath="hes">
                    <DataGridComboBoxColumn.ElementStyle>
                        <Style TargetType="{x:Type ComboBox}">
                            <Setter Property="ItemsSource" Value="{Binding Path=DataContext.HES_COMBO_DATA, RelativeSource={RelativeSource AncestorType=Window}}" />
                        </Style>
                    </DataGridComboBoxColumn.ElementStyle>
                    <DataGridComboBoxColumn.EditingElementStyle>
                        <Style TargetType="{x:Type ComboBox}">
                            <Setter Property="ItemsSource" Value="{Binding Path=DataContext.HES_COMBO_DATA, RelativeSource={RelativeSource AncestorType=Window}}" />
                            <Setter Property="ItemsPanel" Value="{StaticResource VSP}" />

                            <Setter Property="ScrollViewer.CanContentScroll" Value="True"/>
                            <Setter Property="VirtualizingStackPanel.IsVirtualizing" Value="True"/>
                            <Setter Property="VirtualizingStackPanel.VirtualizationMode" Value="Recycling"/>
                        </Style>

                    </DataGridComboBoxColumn.EditingElementStyle>
                </DataGridComboBoxColumn>

من تست کردم حل شد.

به این پاسخ امتیاز بدهید    0
امتیاز: 155 رتبه: 10
برای ارسال پاسخ لطفا وارد حساب کاربری خود شوید.   ورود