Загрузка данных при загрузке формы
От: Аноним  
Дата: 01.03.07 09:01
Оценка:
Здравствуйте. Проблема в вследующем. При загрузке формы в 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();

Или как реализовать это по другому? Возможно многопоточность?

И вообще как сделать грамотную загрузку больших объемов данных при этом показывая, например, прогрессбар? Подскажите...
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();
// Загрузка данных в контрол..в моем случае был листвью и данных не много..

}
C уважением !
Re[2]: Загрузка данных при загрузке формы
От: Pavel M. Россия  
Дата: 01.03.07 10:32
Оценка:
Здравствуйте, Аноним, Вы писали:

А> 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);
не просто так написана..

С уважением !
Re: Загрузка данных при загрузке формы
От: _FRED_ Черногория
Дата: 01.03.07 11:37
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте. Проблема в вследующем. При загрузке формы в DataGrid загружаются данные из базы. Интерфейс при этом, естественно, не отвечает. Думал реализовать это таким образом.


А>Данные загружаются, но в DataGrid не видны. Видны только после клика на хедере столбца. Как его обновить? Пробовал:

А> Или как реализовать это по другому? Возможно многопоточность?

А>И вообще как сделать грамотную загрузку больших объемов данных при этом показывая, например, прогрессбар? Подскажите...

Тот таймер, который ты используешь (System.threading.Timer), вызывает метод (GetData) в отличном от основного, потоке и отсюда все грабли. В GetData тебе надо создать новый датасет и новый адаптер. Заполнить адаптером датасет (новый) и затем, переключившить в основной поток заполнить датасет формы из датасета, заполненного в методе GetData.
Help will always be given at Hogwarts to those who ask for it.
Re[4]: Загрузка данных при загрузке формы
От: Pavel M. Россия  
Дата: 01.03.07 11:40
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, 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);
А>не просто так написана..

А>С уважением !


угу, а Form.Load или Form.Shown не подойдет?
--------------------------
less think — do more
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.