2016-05-24 13 views
1

Ich habe eine ListBox in WinForms .NET 4.5. Ich bekomme immer eine 'NULL' Ausnahme auf der Einfügung und ich weiß nicht warum. Ich habe TWEAK als .dbml von tbl_Tweak komplett mit einem Datensatz. Ich vermisse irgendwo etwas und habe nicht gefunden, was oder wo. Ich hoffe, dass frische, erfahrene Augen hier etwas Licht spenden können. Hier ist der relevante Code.Concatenate ListBox ausgewählte Artikel

Insert-Methode:

public void InsertOrUpdateTweak(string recipename, string batchID, DateTime dtpTweak, int tempTweak, double specificGravityTweak, string tweakBox, string cbEventItems, int r_ID, string arrr) 
     { 
      TWEAKDataContext tdc = new TWEAKDataContext(); 
      if (dirtyTweak == true) 
       try 
       { 
       GetEvents(); 

       tbl_Tweak log = new tbl_Tweak(); 
       log.recipename = recipeName; 
       log.batchID = batchID; 
       log.dtpTweak = DateTime.Now; 
       log.tempTweak = tempTweak; 
       log.specificGravityTweak = specificGravityTweak; 
       log.tweakBox = tweakBox; 
       log.cbEventItems = cbEventItems; 

       tdc.tbl_Tweak.InsertOnSubmit(log); 
       tdc.SubmitChanges(); 
      } 
      catch (Exception ex) 
      { 
       throw ex; //<== This is where it breaks 
      } 
      try 
      { 
       MessageBox.Show("You have not loaded and/or saved the current recipe data"); 
      } 
       finally 
       { 
        tdc.SubmitChanges(); 
       } 
      } 
    } 

GetEvents Methode, wo ich versuche, um die ausgewählten Elemente aus listbox in einen String zu setzen:

public string GetEvents() 
{ 
     string[] arrr = new string[listBoxEvents.Items.Count]; 
     listBoxEvents.SelectedItems.CopyTo(arrr, 0); 
     cbEventItems = string.Join("-", arrr); 
     return cbEventItems; 
} 

I SO gesucht und mehrere Varianten gefunden, die ich weiter unten zeigen:

public string[] GetEvents() 
{ 
String[] cbEventItems = new String[listBoxEvents.SelectedItems.Count]; 
for (int i = 0; i < totalEvents; i++) 
{ 
    var arrr = String.Join(Environment.NewLine, listBoxEvents.SelectedItems.Cast<string>()); 
} 
return arrr; 
} 

und ...

public string[] GetEvents() 
{ 
string[] arrr = new string[listBoxEvents.SelectedItems.Count]; 
for (int i = 0; i < listBoxEvents.SelectedItems.Count; i++) 
arrr[i] = listBoxEvents.SelectedItems[i].ToString(); 

return arrr; 
} 

und auch ...

public string GetEvents() 
{ 
    List<string> arrr = new List<string>(listBoxEvents.SelectedItems.Count); 
    foreach (string listitem in listBoxEvents.SelectedItems) 
    { 
     cbEventItems = string.Join("-", arrr); 
    } 
    return cbEventItems; 
} 
+1

Sieht so aus, als könnte es Verwirrung geben, wenn eine Methode param und eine Feldvariable beide cbEventItems genannt werden. Strings sind unveränderlich, was ebenfalls ein Problem verursachen kann. Versuchen Sie, den cbEventItems-Parameter aus der InsertOrUpdateTweak-Methodensignatur zu entfernen, und geben Sie diesen Befehl – RobCroll

+0

Fügen Sie eine formale Antwort hinzu und ich werde +1 ya. Vielen Dank. Ich fühle mich wie ein n00b. – DV8DUG

Antwort

1

Sieht aus wie es Verwirrung sein kann cbEventItems sowohl so genannte Methode param und Feldvariable mit. Strings sind unveränderlich, was ebenfalls ein Problem verursachen kann. Versuchen Sie, den cbEventItems Parameter aus der InsertOrUpdateTweak Methodensignatur zu entfernen und geben Sie das ein.

Auch wenn die Methode GetEvents eine Zeichenfolge zurückgibt, würde ich eine Methodenvariable erstellen und diese dann verwenden, um den Code lesbarer zu machen.

Verwandte Themen