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


Автор: EqKeeper 21.7.2010, 05:38
Доброго времени суток!

Считываю данные из файлов. Для удобства редактирования, записываю их в DataGridView. После редактирования - записываю обратно в файлы. Все было просто, пока я не решил заменить TextBox'ы на ComboBox'ы. Добавил в DataGridViewComboBoxColumn вытащенную из файла строку, выбрал ее (программно или ручками - не важно). Получил такую вот ошибку:

Цитата
Исключение в DataGridView:
System.ArgumentException: Недопустимое значение DataGridViewComboBoxCell.


При этом выбранная строка в ячейке винда, но любой действие с формой тут же вызывает целый поток таких же ошибок.

Начал экспериментировать. Заменил полученную из файла строку на обычную "A". Все прошло тихо и без ошибок. Пришел к выводу, что проблема заключается в том, какую строку я пытаюсь ему подсунуть. Из файла я ее считываю, как массив байт. Потом энкодингом получаю строчку. И уже ее пытаюсь записать в список бокса. Тем не менее, из-за чего ошибка - не пойму. Вернее, не пойму как ее исправить и что я делаю не так. Вот пример кода с исходными данными, который выдаст ошибку:

Код
// Массив байт - исходные данные в том виде, в котором я получаю их из файла
byte[] bb = new byte[8];
bb[0] = (byte)50;
bb[1] = (byte)48;
bb[2] = (byte)49;
bb[3] = (byte)48;
bb[4] = (byte)48;
bb[5] = (byte)49;
bb[6] = (byte)49;
bb[7] = (byte)51;

// Превращение массива байт в строку
string s = Encoding.UTF8.GetString(bb);

// Добавляем строку в список значений комбобокса 2ой колонки таблицы DataGridView
int index = ((DataGridViewComboBoxColumn)dataGridView1.Columns[2]).Items.Add(s);

// Присваиваем ячейке полученный при добавлении индекс (ни на что не влияет - если выбрать ручками, тоже выдает ошибку)
dataGridView1[2, 1].Value = index;


Заранее спасибо! Очень надеюсь на вашу помощь!

Автор: fvoice 21.7.2010, 07:49
Код

// Массив байт - исходные данные в том виде, в котором я получаю их из файла
byte[] bb = new byte[8];
bb[0] = (byte)50;
bb[1] = (byte)48;
bb[2] = (byte)49;
bb[3] = (byte)48;
bb[4] = (byte)48;
bb[5] = (byte)49;
bb[6] = (byte)49;
bb[7] = (byte)51;
// Превращение массива байт в строку
string s = Encoding.UTF8.GetString(bb);
// Добавляем строку в список значений комбобокса 2ой колонки таблицы DataGridView
int index = ((DataGridViewComboBoxColumn)dataGridView1.Columns[2]).Items.Add(s);
// Присваиваем ячейке полученный при добавлении индекс (ни на что не влияет - если выбрать ручками, тоже выдает ошибку)
dataGridView1[2, 1].Value = s;

Автор: EqKeeper 21.7.2010, 16:50
fvoice
Все, спасибо, разобрался. Частично помогло. Отловил еще один баг - совсем помогло. smile

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