יש לי נתונים עם כ20 עמודות, ושעשויים להכיל אף 20,000 שורות. כרגע בטסטים יש לי כ1000 רשומות בלבד, ולוקח לפקד להיטען כ15 שניות.. אני מבין שזה לא צריך להיות ככה..
לאחר עיון כאן
https://help.syncfusion.com/wpf/datagrid/data-virtualization
וכאן
https://support.syncfusion.com/kb/article/6938/how-to-improve-performance-when-loading-grid-with-records-and-columns-in-wpf-datagrid
הוספתי את "EnableDataVirtualization="True
אבל "UseDrawing="Default
לא מתאים (וגם לא ראיתי שעזר..) כי הוא מרנדר את העברית משמאל לימין כמו כתב מראה.. ועדיין לא נושעתי..
אותו קוד טוען את אותם הנתונים לפקד DataGrid רגיל בחלקיק שניה..
מצורף הxaml (הורדתי חלק מהעמודות טקסט או צ'ק בוקס, כשהשארתי 2 עמודות בלבד, זה נטען לאחר 3 שניות.. עדיין הרבה ל2 עמודות בלבד..)
<syncfusion:SfDataGrid x:Name="dataGrid2" Margin="43,153,43,130" AutoGenerateColumns="False"
AllowFiltering="True" AllowEditing="True" FontSize="14"
AllowResizingColumns="True" EnableDataVirtualization="True" AllowDraggingColumns="True"
MouseDoubleClick="DataGrid2_MouseDoubleClick" HeaderStyle="{StaticResource headerStyle}"
AlternatingRowStyle="{StaticResource alternatingRowStyle}" AlternationCount="2"
RowStyle="{StaticResource RowStyle}">
<syncfusion:SfDataGrid.Columns>
<syncfusion:GridCheckBoxColumn HeaderText="בחר" MappingName="selectTemp" Width="50"
IsReadOnly="False" AllowEditing="True" />
<syncfusion:GridTextColumn HeaderText="איידי" MappingName="id" Width="60"
IsReadOnly="True" AllowEditing="False" />
<syncfusion:GridCheckBoxColumn HeaderText="פעיל" MappingName="active" Width="40"
IsReadOnly="True" AllowEditing="False" />
<syncfusion:GridTextColumn HeaderText="שם" MappingName="name" Width="90"
IsReadOnly="True" AllowEditing="False" />
<syncfusion:GridTemplateColumn HeaderText="רייטינג" MappingName="rating" Width="150">
<syncfusion:GridTemplateColumn.CellTemplate>
<DataTemplate>
<local:StarRatingControl x:Name="starRatingControl" Rating="{Binding rating}"
IsHitTestVisible="False" />
</DataTemplate>
</syncfusion:GridTemplateColumn.CellTemplate>
</syncfusion:GridTemplateColumn>
</syncfusion:SfDataGrid.Columns>
</syncfusion:SfDataGrid>
זה הקוד שאיתו אני טוען את הנתונים לפקד בפתיחת הטופס
private SQLiteDataAdapter adapter;
private DataTable dataTable;
private DataView dataView;
public async void LoadData()
{
UpdateStatusBar("טוען נתונים..");
try
{
await Task.Run(() =>
{
using (SQLiteConnection connection = new SQLiteConnection(Globals.connectionString))
{
connection.Open();
string selectSql = "SELECT selectTemp, id, name, active, rating FROM tPeople";
using (SQLiteCommand cmd = new SQLiteCommand(selectSql, connection))
{
adapter = new SQLiteDataAdapter(cmd);
SQLiteCommandBuilder commandBuilder = new SQLiteCommandBuilder(adapter);
dataTable = new DataTable();
adapter.Fill(dataTable);
dataView = new DataView(dataTable);
}
connection.Close();
}
Dispatcher.Invoke(() =>
{
dataGrid2.ItemsSource = dataView;
UpdateStatusBar("מוכן");
});
});
}
catch (Exception ex)
{
// exceptions
}
}