2013-04-14 3 views
0

У меня есть DataGridView, связанный с DataTable. Клетки в таблице установлены в десятичную.C# изменение ячейки DataGridView Тип (ошибка?)

В случае отсутствия релевантных данных, я хочу поменять текст «Нет данных» в столбце «Мощность» (# 2), а не на значение.

Для этого я следующее:

foreach (DataGridViewRow row in resultsDataGrid.Rows) 
    if ((int)row.Cells["DataYN"].Value == 1) 
    { 
    row.Cells["Power"].ValueType = typeof(String); 
    row.Cells["Power"].Value = "No Data"; 
    } 

При компиляции, я получаю сообщение об ошибке «„Нет данных“не является допустимым значением для Decimal ....».

Тип значения ячейки явно установлен и показан как строка, однако компилятор считает, что он все равно десятичный. Я пробовал все виды кастинга и преобразования, но безрезультатно.

  1. Это ошибка компилятора?
  2. Есть ли обходной путь?

samtal

+0

при компиляции? ты уверен? или при запуске? компилятор не должен действительно знать тип типа типа. – ericosg

+0

как насчет использования SetValue()? он должен помещать его в тип объекта без каких-либо проблем. – ericosg

+0

Правильно, это при отладке, которая работает. Сожалею. Я пробовал SetValue, но получаю еще одну дополнительную проблему: в SetValue нужно вставить полную строку (объектов), но я хочу изменить одну ячейку в одном столбце (# 2). Я попробовал nulls, листинг для Object и т. Д., Но получаю ошибки (http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridviewrow.setvalues.aspx) Что бы я ни делал, система по-прежнему настаивает на том, что ячейки сохраняют свой оригинальный тип и не будут принимать строку или объект. Я по-прежнему считаю, что это ошибка, и все еще ищет обходной путь. – samtal

ответ

0

Вместо того, на самом деле пытается изменить значение ячейки, то почему бы не указать «Нет данных» как свойство NullValue стиля по умолчанию ячейки (http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridviewcellstyle.nullvalue.aspx). Это позволит исключить необходимость циклирования данных и не позволит сетке пытаться преобразовать значение в десятичное.

+0

Спасибо. NullValue - хорошее средство для ячеек, у которых нет данных. Мои ячейки имеют все данные по умолчанию, поэтому не являются нулевыми. Кроме того, проблема, о которой я описал (тип ячеек сильная - не активирует кастинг или изменение) сохраняется даже с установленным значением по умолчанию Null (проверено как предложено). Как я писал, если я полностью не понял свойства, это кажется ошибкой (?). (VS2010 Express, Win7 64) – samtal

+0

@ user2279419 Для любого столбца в DataGridView значения могут быть только типа данных столбца или 'DbNull' /' null'. Вы не можете смешивать типы данных. – erdomke

+0

спасибо erdomke - Фактически, вы, кажется, правы. Я могу изменить тип отдельной ячейки по умолчанию Decimal by row.Cells [2] .ValueType = typeof (String), как это видно в отладчике, но при вводе фактических данных строки в ячейку он выбрасывает тип ошибка. Это странная ситуация в VS с противоречивым поведением. Кроме того, я искал документацию по MS VS и не мог найти явного ограничения типа, а именно, говоря, что тип должен быть одинаковым во всех строках (ячейках) в данном столбце. Я сдался, если кто-то не может прийти с умным обходным решением. – samtal

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