Здравствуйте. Проблема в вследующем. При загрузке формы в DataGrid загружаются данные из базы. Интерфейс при этом, естественно, не отвечает. Думал реализовать это таким образом.
private void GetData(Object stateInfo)
{
// прочитать информацию из базы данных
this.dfilesTableAdapter.Fill(this.db_cliDataSet.dfiles);
// удаляю таймер, что-бы он больше не вызывался
tim.Dispose();
}
///////////////////////////////////////////////////////////////////////////
// Загрузка формы
private void MainForm_Load(object sender, EventArgs e)
{
// Создание делегата
timerDelegate = new TimerCallback(GetData);
tim = new System.Threading.Timer(timerDelegate);
tim.Change(10, 100000);
}
Данные загружаются, но в DataGrid не видны. Видны только после клика на хедере столбца. Как его обновить? Пробовал:
Или как реализовать это по другому? Возможно многопоточность?
И вообще как сделать грамотную загрузку больших объемов данных при этом показывая, например, прогрессбар? Подскажите...
Re: Загрузка данных при загрузке формы
От:
Аноним
Дата:
01.03.07 10:06
Оценка:
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте. Проблема в вследующем. При загрузке формы в DataGrid загружаются данные из базы. Интерфейс при этом, естественно, не отвечает. Думал реализовать это таким образом.
А> private void GetData(Object stateInfo) А> { А> // прочитать информацию из базы данных А> this.dfilesTableAdapter.Fill(this.db_cliDataSet.dfiles); А> // удаляю таймер, что-бы он больше не вызывался А> tim.Dispose(); А> }
А> /////////////////////////////////////////////////////////////////////////// А> // Загрузка формы А> private void MainForm_Load(object sender, EventArgs e) А> { А> // Создание делегата А> timerDelegate = new TimerCallback(GetData); А> tim = new System.Threading.Timer(timerDelegate); А> tim.Change(10, 100000); А> }
А>Данные загружаются, но в DataGrid не видны. Видны только после клика на хедере столбца. Как его обновить? Пробовал:
А> this.Invalidate(); А> this.dataGridView1.Update(); А> this.dataGridView1.Focus();
А> Или как реализовать это по другому? Возможно многопоточность?
А>И вообще как сделать грамотную загрузку больших объемов данных при этом показывая, например, прогрессбар? Подскажите...
Доброго !
this.Activated += new System.EventHandler(this.Form1_Activated);
.....
private void Form1_Activated(object sender,EventArgs e)
{
this.Activated -= new System.EventHandler(this.Form1_Activated);
Application.DoEvents();
// Загрузка данных в контрол..в моем случае был листвью и данных не много..
Здравствуйте, Аноним, Вы писали:
А> private void Form1_Activated(object sender,EventArgs e) А> { А> this.Activated -= new System.EventHandler(this.Form1_Activated); А> Application.DoEvents(); А> // Загрузка данных в контрол..в моем случае был листвью и данных не много..
А> } А>C уважением !
Если я не ошибаюсь, Activate каждый раз при фокусе будет вызываться и данные будут подгружаться из базы, не факт, что это нужно... Если человек хочет сделать параллельно, то нужно запустить отдельный поток и в адаптер, например, забрать из базы нужные данные и по его завершении подгрузить данные из базы в DataGridView.
--------------------------
less think — do more
Re[3]: Загрузка данных при загрузке формы
От:
Аноним
Дата:
01.03.07 11:00
Оценка:
Здравствуйте, Pavel M., Вы писали:
PM>Здравствуйте, Аноним, Вы писали:
А>> private void Form1_Activated(object sender,EventArgs e) А>> { А>> this.Activated -= new System.EventHandler(this.Form1_Activated); А>> Application.DoEvents(); А>> // Загрузка данных в контрол..в моем случае был листвью и данных не много..
А>> } А>>C уважением !
PM>Если я не ошибаюсь, Activate каждый раз при фокусе будет вызываться и данные будут подгружаться из базы, не факт, что это нужно... Если человек хочет сделать параллельно, то нужно запустить отдельный поток и в адаптер, например, забрать из базы нужные данные и по его завершении подгрузить данные из базы в DataGridView.
Доброго !
Не ошибаетесь, за исключением того, что вот эта первая строка ...
this.Activated -= new System.EventHandler(this.Form1_Activated);
не просто так написана..
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте. Проблема в вследующем. При загрузке формы в DataGrid загружаются данные из базы. Интерфейс при этом, естественно, не отвечает. Думал реализовать это таким образом.
… А>Данные загружаются, но в DataGrid не видны. Видны только после клика на хедере столбца. Как его обновить? Пробовал:
… А> Или как реализовать это по другому? Возможно многопоточность?
… А>И вообще как сделать грамотную загрузку больших объемов данных при этом показывая, например, прогрессбар? Подскажите...
Тот таймер, который ты используешь (System.threading.Timer), вызывает метод (GetData) в отличном от основного, потоке и отсюда все грабли. В GetData тебе надо создать новый датасет и новый адаптер. Заполнить адаптером датасет (новый) и затем, переключившить в основной поток заполнить датасет формы из датасета, заполненного в методе GetData.
Help will always be given at Hogwarts to those who ask for it.
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, Pavel M., Вы писали:
PM>>Здравствуйте, Аноним, Вы писали:
А>>> private void Form1_Activated(object sender,EventArgs e) А>>> { А>>> this.Activated -= new System.EventHandler(this.Form1_Activated); А>>> Application.DoEvents(); А>>> // Загрузка данных в контрол..в моем случае был листвью и данных не много..
А>>> } А>>>C уважением !
PM>>Если я не ошибаюсь, Activate каждый раз при фокусе будет вызываться и данные будут подгружаться из базы, не факт, что это нужно... Если человек хочет сделать параллельно, то нужно запустить отдельный поток и в адаптер, например, забрать из базы нужные данные и по его завершении подгрузить данные из базы в DataGridView.
А>Доброго ! А>Не ошибаетесь, за исключением того, что вот эта первая строка ... А>this.Activated -= new System.EventHandler(this.Form1_Activated); А>не просто так написана..
А>С уважением !