2010-07-06 6 views
0

Фон: У меня есть произвольный запрос, который выполняется, а затем я извлекаю данные - массив записей = массивы объектов. Я хотел бы просмотреть их с помощью DataGrid.Как ускорить работу WPF DataGrid?

Проблема: Непонятно, что приложение достаточно отзывчивое. Переход от запроса к запросу выполняется медленно, для переключения требуется около 1-2 секунд, и пока отображается только ~ 20 записей! Я хочу сделать переключатель мгновенно, вы нажмете «следующий запрос» и сразу получите результаты.

Код:

 // defining colums for a grid 
     grid.Columns.Clear(); 

     int i = 0; 
     foreach (var db_col in query.Names) // names of the colums 
     { 
      var col = new DataGridTextColumn(); 
      col.Header = db_col; 
      col.Binding = new Binding(String.Format("Data[{0}]",i)); 
      grid.Columns.Add(col); 
      ++i; 
     } 

     // adding rows to grid -- the culprit 
     grid.Items.Clear(); 

     foreach (var db_row in query.Rows) 
     { 
      var row = new DataGridRow(); 
      row.Item = db_row; 
      grid.Items.Add(row); 
     } 

Я не могу понять, что я могу другой путь - я перебирать строки и добавить их один за другим. Строки уже находятся в памяти, на данный момент связи с базой данных нет. Как это узнать (добавление строк) является причиной замедления? Совершенно просто, я прокомментирую это, и приложение становится быстрым.

My box: Windows 7 Ultimate 32-bit, процессор Intel Core2Duo 2.66GHz, 2GB RAM.

ответ

1

Вы пытались вызвать BeginInit и EndInit, чтобы остановить обновление сетки после добавления каждого элемента?

grid.BeginInit(); 
grid.Items.Clear(); 

foreach (var db_row in query.Rows) 
{ 
    var row = new DataGridRow(); 
    row.Item = db_row; 
    grid.Items.Add(row); 
} 

grid.EndInit(); 
+0

Спасибо, я сделал сейчас, но все же - отставание видно. – greenoldman

Смежные вопросы