вопрос по Datagridview

  • Автор темы Eugene
  • Дата начала
Статус
Закрыто для дальнейших ответов.
E

Eugene

#1
Вопрос: есть таблица, в которой одно из полей является combobox'ом.
В этой таблице есть поле TYPE_ID, кот. связано с другой таблицей по полю id.
Вторая таблица состоит из двух полей: id и name. Значения combobox'а
берутся из этой таблицы из поля name. Выбранным элементом считается тот,
для которого выполняется условие: id=TYPE_ID. Вроде все просто.
Вот так я это решил.
С#:
// заполнение таблицы
DataGridView dataGridView1 = new DataGridView();
dataGridView1.Dock = DockStyle.Fill;
DataTable dataTable = new DataTable();
oracleDataAdapter1.Fill(dataTable);
dataGridView1.DataSource = dataTable;
Controls.Add(dataGridView1);

// заполнение combobox'ов
DataGridViewComboBoxColumn comboboxColumn = new DataGridViewComboBoxColumn();
comboboxColumn.HeaderText = "Combo";
comboboxColumn.DisplayMember = "name";
comboboxColumn.ValueMember = "id";
comboboxColumn.DataPropertyName = "TYPE_ID";
DataTable table2 = new DataTable();
oracleDataAdapter2.Fill(table2);
comboboxColumn.DataSource = table2;
dataGridView1.Columns.Insert(0, comboboxColumn);

Этот код действительно у меня работает, но не совсем так как мне бы хотелось.
Не устраивает производительность. Особенно это становится заметным, когда
достаточно много элементов содержится в combobox'е. Таблица начинает на
экране построчно очень долго строится и навигация по таблица очень медленная.
Подскажите, как увеличить производительность.
 
E

Electro

#2
Этот код действительно у меня работает, но не совсем так как мне бы хотелось.
Не устраивает производительность. Особенно это становится заметным, когда
достаточно много элементов содержится в combobox'е. Таблица начинает на
экране построчно очень долго строится и навигация по таблица очень медленная.
Подскажите, как увеличить производительность.
А почему не используешь DataSet ?
 
R

Real-Mulik

#3
Тормоз идет из-за этой строчки скорее всего

Код:
DataTable table2 = new DataTable();
Правдо несовсем понятно какой именно запрос oracleDataAdapter2 филит в таблицу table2. Однако Тормоз идет, из-за того что для каждой строки создается отдельный экземпляр объекта в опреативке. Из-за это чувствительно сьедается память. Выхода как всегда 2:

1. Можно не объявлять новый объект table2 каждый раз при заполнении, а объявит его где-нить вверху (глобально), а потом по мере необходимости очищать и заполнять(филить) заново.

2. Так же вверху в оперативку можно вогнать всю таблицу(профилить) из которой будет заполняться combo. А далее использовать метод Select объекта table2. Сэкономишь время и место.
 
Статус
Закрыто для дальнейших ответов.