Иван К.
2 сообщения
#14 лет назад
Комрады помогите. Разбираюсь с написанием программ для кпк на c#. Столкнулся с проблеммой.
Когда кол-во записей в таблице мало, то данные загружаются быстро, когда много то очень долго идет загрузка в datagrid.
Последовательность действий.
1. создаю стили полей и добавляю их к стилю таблиц

DataGridTextBoxColumn ColId = new DataGridTextBoxColumn();
ColId.MappingName = "ID";
ColId.HeaderText = "№";
ColId.Width = 60;
tabStyleMOB_ORDER.GridColumnStyles.Add(ColId);

2. указываю DataSource у datagrid
3. у меня есть select с полным указанием полей внутри
4. далее по тексту

SQLMOB_Q.CommandText = inSQL;
adapterMOB_Q.SelectCommand = SQLMOB_ORDER;
DatTableMOB_Q.Clear();
DatTableMOB_Q.BeginLoadData();
adapterMOB_Q.Fill(DatTableMOB_ORDER); - САМАЯ ДОЛГАЯ ОПЕРАЦИЯ
DatTableMOB_Q.EndLoadData();

Вариант №2 через SqlCeDataReader загрузить данные, потом руками

DatTableMOB_Q.BeginLoadData();
while (readerMobile.Read())
{
DataRow row = DatTableMOB_Q.NewRow();
row = 0;
DatTableMOB_Q.Rows.Add(row);
}
DatTableMOB_Q.EndLoadData();

Долго загружаются данные в DataGrid
Может кто сталкивался с таким, да БД Microsoft SQL Server 2005 Compact Edition
Максим Борисов
4 сообщения
#14 лет назад
Процитирую пост некого kei_om
Цитата:
Господа, такая проблема (FrameWork 2.0):

для отлючения нотификаций и пр., если данные связаны с контролами, использую DataTable.BeginLoadData
Но: если в DataTable достаточно много Expression-колонок, то загрузка таблицы замедляется в десятки раз.

Т.е. пример (с DataGridView, то же с DataGrid):

grid.DataSource = table;
grid.DataMember = table.TableName;
...
table.BeginLoadData();
dataAdapter.Fill(...
table.EndLoadData();

работает во много раз медленнее если в table много колонок с установленным Expression.
Причем в framework 1.1 все отлично

Сталкивался кто-нибудь с такой проблемой, может подскажете решение?
Спасибо


Видимо Ваш случай. Посему единственное, что могу Вам посоветовать - убрать в целях эксперимента DatTableMOB_Q.BeginLoadData(); и DatTableMOB_Q.EndLoadData();
А во избежание хотя бы перерисовок - прятать соответствующие контролы.
P.S. Плохой ход, но всё же возможный воркэраунд
Иван К.
2 сообщения
#14 лет назад
К сожалению у меня не используются выражения.
В вопросе уже есть BeginLoadData/EndLoadData. Добавление/удаление BeginLoadData/EndLoadData проблему не решает.
попробовал сделать так
dgMOB_Q.Visible = false;
Делаем что-то с таблицей
dgMOB_Q.Visible = true;