2013-05-02 27 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

更新:这里是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'的价值是什么。 – 2013-05-02 07:14:43

+0

你会在哪一行发生错误? – nvoigt 2013-05-02 07:14:52

+0

你在哪一行代码中得到这个错误? – 2013-05-02 07:15:04

回答

2

好实施,defectColor.OEEColor似乎是null和数据模型不允许值为null。三种可能的解决方案:

  1. 改变数据模型,使本场可null
  2. 确保defectColor.OEEColornull
  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包含字符串值“零”!这意味着,defectColor.OEEColor本身null,但它包含单词“空”

正因为如此,下面一行变成单词“空”到“#NULL”(因此你的怪问题标题“#NULL不是一个有效值...”):

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

之后oeeColor的值为“#NULL”,然后将下面的行(我想,因为你没有给我们上过哪行异常真正发生的任何细节...)抛出一个错误:

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

您必须确保defectColor.OEEColor既不是null(即“没有值”),它的值是一个有效的HTML颜色字符串!

+0

在这里的选项3我无法添加? <默认值>(此代码)它抛出异常 – user2181338 2013-05-02 07:28:58

+1

选项2我无法做到这一点,因为我需要在我的数据库中的空和有效的颜色 – user2181338 2013-05-02 07:29:32

+0

你读过你应该写什么'<默认值>'?请显示AddMachineStatusColors方法的实现,以便我们可以进一步提供帮助。 – 2013-05-02 07:32:42

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 2013-05-02 07:33:18

+2

向我们显示“AddMachineStatusColors”的代码。 – 2013-05-02 07:35:05

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

这不是错误发生的地方。 – 2013-05-02 07:33:36

相关问题