Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Подвисает форма при наполнении DataGrid


Автор: qpile 25.8.2010, 11:43
Добрый день , уважаемые всем! Мой дата грид в таймере с помощью этого метода наполняется из базы мускуль вот этим методом
Код

  public void onchangetable()
        {
            String res_date, res_date_fin;
            res_date = this.dateTimePicker1.Value.Year.ToString() + "-" + this.dateTimePicker1.Value.Month.ToString() + "-" +
                this.dateTimePicker1.Value.Day.ToString();
            res_date_fin = this.dateTimePicker2.Value.Year.ToString() + "-" + this.dateTimePicker2.Value.Month.ToString() + "-" +
                this.dateTimePicker2.Value.Day.ToString();

            data = new DataTable();
            if (this.tables.SelectedItem.ToString() == "rts")
            {
                da = new MySqlDataAdapter("SELECT * FROM " + this.tables.SelectedItem.ToString(), conn);
            }
            else
            {
                String query = "SELECT * FROM " + this.tables.SelectedItem.ToString() + " where code='" +
                    CodeTextBox.Text + "' and data ='" + res_date + "'  order by data,time";
                da = new MySqlDataAdapter(query, conn);
            }

                cb = new MySqlCommandBuilder(da);

                da.Fill(data);

                this.dataGrid.DataSource = data;

            
        }


Но проблема в том, что при этом виснет форма. Как сделать так , что бы этого не было? В отдельном потоке не получается. Поскольку сам датагрид создается в ней.

Спасибо всем большое за помощь!

Автор: gambit 25.8.2010, 12:26
Цитата(qpile @  25.8.2010,  11:43 Найти цитируемый пост)
в таймере

а избавится от таймера не получится?

Цитата(qpile @  25.8.2010,  11:43 Найти цитируемый пост)
В отдельном потоке не получается. Поскольку сам датагрид создается в ней.

Из отдельного потока, обратиться к контролу род потока, можно через метод Invoke()

Автор: qpile 25.8.2010, 13:17
Цитата(gambit @ 25.8.2010,  10:26)
Цитата(qpile @  25.8.2010,  11:43 Найти цитируемый пост)
в таймере

а избавится от таймера не получится?

Цитата(qpile @  25.8.2010,  11:43 Найти цитируемый пост)
В отдельном потоке не получается. Поскольку сам датагрид создается в ней.

Из отдельного потока, обратиться к контролу род потока, можно через метод Invoke()

а как можно избавиться от таймера? INVOKE Тоже делал. Тоже саоме

Автор: ДобренькийПапаша 25.8.2010, 13:33
Я не стал въезжать в тему, но чтобы выполнять что-то в отдельном потоке и из него обращаться к контролу на форме надо использовать InvokeRequired!

Автор: gambit 25.8.2010, 14:06
Цитата(qpile @  25.8.2010,  13:17 Найти цитируемый пост)
а как можно избавиться от таймера?

ну я же не телепат. Вообще, все это делается на событиях.

Автор: mrbrooks 25.8.2010, 14:17
чую я что грузится фигова туча данных, которую юзер будет просматривать (по мнению девелопера) с интересом, прокручивая скролл в течении пару лет.

Конечно грузить в потоке - это прекрасная идея, но возможно автор посмотрит и удовлетворится:
a) DataGridView.VirtualMode и все отсюда вытекающее.
б) Реализует Paging DataGridView

хинт: то что латиницей - можно выделить и гугл.

Автор: qpile 25.8.2010, 15:31
Цитата(mrbrooks @ 25.8.2010,  12:17)
чую я что грузится фигова туча данных, которую юзер будет просматривать (по мнению девелопера) с интересом, прокручивая скролл в течении пару лет.

Конечно грузить в потоке - это прекрасная идея, но возможно автор посмотрит и удовлетворится:
a) DataGridView.VirtualMode и все отсюда вытекающее.
б) Реализует Paging DataGridView

хинт: то что латиницей - можно выделить и гугл.

В точку!  smile 

Но все таки данные не все, но какой то определенный достаточный большой кусок просмотреть может. Попробую попробовать Ваши варианты. Спасибо!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)