2013-08-16 5 views
0

У меня есть столбец DatagridviewCombobox, и я создаю ячейки DatagridviewCombobox в каждой строке и добавляя к нему элементы. Когда я изменяю значение какой-либо ячейки (combobox), он выдает исключение, говорящее, что Datagridviewcombobox cell value is not valid. и значение ячейки становится «1».Значение DatagridViewComboboxCell, измененное в C#

Я работаю над событием datagridview_currentcelldirtystatechange, но не смог заставить его работать.

Код, приведенный ниже, создает строки и заполняет ячейки со списком с номерами последовательностей.

int _rowLimit =1; 

    for (int i = _rowLimit - 1; i < _rowLimit; i++) 
    {   
     datagridview.Rows.Add(); 
     item = i + 1; 
     datagridview[myColumn, i].Value = _rowLimit;     

     DataGridViewComboBoxCell oCell = datagridview.CurrentRow.Cells[myColumn] as DataGridViewComboBoxCell; 
     oCell.Items.Add(item); 

     ((DataGridViewComboBoxColumn)datagridview.Columns[myColumn]).Items.IndexOf(_rowLimit); 
     ((DataGridViewComboBoxColumn)datagridview.Columns[myColumn]).Items.Insert(index, item); 
    } 

И ниже то, что я делаю в datagridview_currentcelldirtystatechange случае:

for (int innerIndex = 0; innerIndex < datagridview.Rows.Count; innerIndex++) 
    { 
     long sequence = 3; 
     long oldSequence = 2; 
     long tempValue= Convert.ToInt64(datagridview.Rows[innerIndex].Cells[myColumn].Value); 
     if (tempValue <= sequence && tempValue> oldSequence) 
     {      
      datagridview.Rows[innerIndex].Cells[myColumn].Value = tempValue+ 1; // increment the sequence 
// value here i am getting is correct , but it doesn't show in the DatagridviewCombobox cell where it gets changed of gridview and the mentioned exception is thrown. 

     } 

Любая помощь будет оценена. Спасибо.

+0

Похоже, вам нужно поместить бит или заказ в свой код, чтобы точно знать, что вы делаете, потому что текущая версия довольно запутанна (и это почти наверняка вызывает то, что вызывает ошибки). В первом коде вы используете различные индексы, которые используются более или менее анархическим способом; тем проще: используйте один индекс для строк coutings (строка), переменную для полных строк (maxRow), элемент, который вы вводите (элемент, список значений, поле со списком или все, что вам нужно), и последнюю часть, в которой элементы добавляются в datagridview: четкие, простые и не подверженные ошибкам. – varocarbas

+0

После того, как заполняющая часть была выполнена правильно, вам также необходимо получить доступ к этой информации (для чтения/редактирования). Перед добавлением значения вы должны убедиться, что его тип совпадает с тем, что поддерживает данная ячейка /. Вы должны убедиться, что каждый шаг работает и намеревается решить/прийти сюда, чтобы задать каждую новую проблему. Текущая версия вашего кода довольно «недружелюбная», проблемы могут быть повсюду, и вся переработка кода звучит как лучшая вещь. – varocarbas

+0

Спасибо за ответ. хорошо, я постараюсь сделать его более дружелюбным. , но если вы получили мое заявление о проблеме, не могли бы вы рассказать мне, как заставить его работать? На самом деле это простая комбобокс, и в выпадающем списке combobox есть порядковые номера ... Я хочу изменить его значение (выбранное изменение индекса), на каком событии я должен работать и как это можно достичь? Спасибо – HKhan

ответ

1

ошибка на selectedindexChange стоимости COMBOBOX клеток и за исключением стоимости DataGridViewComboBoxCell не является действительным .. что автоматически сделал изменения выбранного Vlue «1» .. я исправила эту проблему, добавив свойство DatagridviewComboBoxColumn в конструкторе файл.

this.columnName.ValueType = typeof(long); 

TypeOf (длинный) // это то, что я хотел показать значение в столбце datagridviewcombobox.

Проблема решена. Спасибо.

+0

Спасибо varocarbas за ваши предложения и быстрые ответы..thanks :) – HKhan

+0

, поскольку comboboxcell не получал свой фактический сопоставленный тип , поэтому исключение исключения «DataGridviewComboboxcell» недействительно » – HKhan

Смежные вопросы