2013-05-02 2 views
1

Пока я отлаживаю код, я получаю ошибку #NULL is not a valid value for Int32.#NULL недопустимое значение для Int32

private void satelliteComboBox_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    Helper.SetWaitCursor(); 
    if (satelliteComboBox.SelectedValue != null) 
    { 
     var satelliteId = Convert.ToInt32(satelliteComboBox.SelectedValue); 
     satelliteStatusUserControl.DataSource = 
      _satelliteStatusBusinessService.GetSingleSatellite(
       new Dictionary<string, object> { { "SatelliteID", satelliteId } }, true); 
     //2012.07.07 get colors for all machine status 
     satelliteStatusUserControl.DataSource.DefectColors = 
        _satelliteStatusBusinessService.GetDefectColors().ToList(); 

     foreach (var defectColor in 
         satelliteStatusUserControl.DataSource.DefectColors) 
     { 
      MachineStatusCtrl.AddMachineStatusColors(
         defectColor.DefectTypeID, 
         defectColor.DefectType, 
         defectColor.OEEColor); 
     } 
     //2012.07.07 
     satelliteStatusUserControl.DataBind(); 
    } 
    Helper.SetDefaultCursor(); 
} 

Я получаю эту ошибку в моем foreach цикле

UPDATE: Вот реализация для AddMachineStatusColors

public static void AddMachineStatusColors(int statusColorId, string StatusName, string oeeColor) 
{   
    MacStatusColors macStatusColor; 

    //add dummy colors with unknow till the next defectId so that it will be easy to get color later while painting.    
    for(int Index = StatusColors.Count; Index < statusColorId ; Index++) 
    { 
     macStatusColor = new MacStatusColors(); 
     StatusColors.Add(macStatusColor); 
    } 

    macStatusColor = new MacStatusColors(); 
    macStatusColor.DefectTypeID = statusColorId; 
    macStatusColor.DefectType = StatusName; 
    macStatusColor.OEEColor1 = ControlPaint.Dark(getColorFromString(oeeColor)); 
    macStatusColor.OEEColor2 = ControlPaint.Light(getColorFromString(oeeColor)); 
    StatusColors.Add(macStatusColor); 
} 



    public static Color getColorFromString(string oeeColor) 
    {    
     if (oeeColor[0] != '#') { oeeColor = '#' + oeeColor; } 
     return System.Drawing.ColorTranslator.FromHtml(oeeColor); 
    } 
+1

Пожалуйста отладить первый, а потом выложите на какой линии ошибка происходит. Кроме того, какова ценность 'satelliteComboBox.SelectedValue'. –

+0

На какой строке вы получаете сообщение об ошибке? – nvoigt

+0

На какой строке кода вы получаете эту ошибку? –

ответ

2

Ну, defectColor.OEEColor, кажется null и ваша модель данных не позволяет Значение должно быть null. Три возможных решения:

  1. Изменить модель данных, так что поле может быть null
  2. Убедитесь defectColor.OEEColor не null
  3. Изменение линии:

    MachineStatusCtrl.AddMachineStatusColors(..., ..., defectColor.OEEColor ?? <default value>);

С <default value> 0 или любым другим int Значение, которое вы хотите использовать, чтобы указать «цвет null».


Вы добавили код для метода AddMachineStatusColors. Спасибо, но все же я говорю, что ваш код предполагает, что defectColor.OEEColor не null. Есть в вашем коде, по крайней мере две строки, где я предполагаю, что defectColor.OEEColor не может быть null:

macStatusColor.OEEColor1 = ControlPaint.Dark(getColorFromString(oeeColor)); 
macStatusColor.OEEColor2 = ControlPaint.Light(getColorFromString(oeeColor)); 

Показать код для getColorFromString, пожалуйста, или точно сказать, на какую линию в вашем AddMachineStatusColors метода происходит ошибка!


ОК, теперь мы куда-то попадаем. defectColor.OEEColor содержит значение строки "null" !! То есть, defectColor.OEEColor сам не null, но он содержит слово «null».

Из-за этого, следующая строка получается слово «нуль» в «#null» (при этом ваш странный вопрос заголовок о «#null не является допустимым значением ...»):

if (oeeColor[0] != '#') { oeeColor = '#' + oeeColor; } 

После этого oeeColor имеет значение «#null», а затем следующую строку (я предполагаю, что вы не дали нам никаких подробностей, на которой выравнивают исключение действительно происходит ...) выдает ошибку:

return System.Drawing.ColorTranslator.FromHtml(oeeColor); 

Вы должны убедиться, что defectColor.OEEColor не является ни null (т.е. «не имеет значения») и что значение, которое оно имеет, является допустимой строкой цвета HTML!

+0

здесь, в опции 3, я не могу добавить ?? <значение по умолчанию> (этот код) он выбрасывает исключение – user2181338

+1

вариант 2 я не могу сделать это, потому что мне нужны как нулевые, так и допустимые цвета в моей базе данных – user2181338

+0

Вы читали, что вы должны писать для '<значение по умолчанию>'? Продемонстрируйте реализацию метода 'AddMachineStatusColors', чтобы мы могли помочь вам. –

0

Если число вы получаете может быть пустым, это, вероятно, Nullable<Integer> что означает, что будет иметь .HasValue свойство ...

foreach (var defectColor in satelliteStatusUserControl.DataSource.DefectColors) 
{ 
    if(defectColor.OEEColor.HasValue) { 
     MachineStatusCtrl.AddMachineStatusColors(defectColor.DefectTypeID, defectColor.DefectType, defectColor.OEEColor); 
    } else { 
     //Use a default 
     MachineStatusCtrl.AddMachineStatusColors(defectColor.DefectTypeID, defectColor.DefectType, 0); 
    } 
} 
+0

Почему я не могу добавить свойство hasvalue в свой код – user2181338

+2

Покажите нам код для 'AddMachineStatusColors'. –

-1
int? satelliteId; 
int i; 
if (satelliteComboBox.SelectedValue != null && int.tryParse(satelliteComboBox.SelectedValue, out i)) 
{ 
    satellideId = i; 
} 
+0

Это не та строка, где происходит ошибка. –

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