Объединить выбранные элементы ListBox

У меня есть listBox в WinForms .NET 4.5. Я продолжаю получать исключение «NULL» при вставке, и я не знаю, почему. У меня есть TWEAK как .dbml из tbl_Tweak с набором данных. Я что-то где-то пропустил и не смог найти что и где. Я надеюсь, что свежий, опытный взгляд может пролить здесь некоторый свет. Вот соответствующий код.

Метод вставки:

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, в котором я пытаюсь поместить выбранные элементы из списка в строку:

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

Я искал SO и нашел несколько вариантов, которые я показываю ниже:

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;
}

а также...

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;
}

а также...

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

person DV8DUG    schedule 24.05.2016    source источник
comment
Похоже, может возникнуть путаница, если параметр метода и переменная поля называются cbEventItems. Строки являются неизменяемыми, что также может быть причиной проблемы. Попробуйте удалить параметр cbEventItems из сигнатуры метода InsertOrUpdateTweak и попробуйте   -  person RobCroll    schedule 25.05.2016
comment
Добавьте формальный ответ, и я поставлю вам +1. Большое спасибо. Я чувствую себя n00b.   -  person DV8DUG    schedule 25.05.2016


Ответы (1)


Похоже, может возникнуть путаница, если параметр метода и переменная поля называются cbEventItems. Строки являются неизменяемыми, что также может быть причиной проблемы. Попробуйте удалить параметр cbEventItems из сигнатуры метода InsertOrUpdateTweak и попробуйте.

Кроме того, видя, что метод GetEvents возвращает строку, я бы создал переменную метода, а затем использовал ее, чтобы сделать код более читаемым.

public void InsertOrUpdateTweak(string recipename, string batchID, DateTime dtpTweak, int tempTweak, double specificGravityTweak, string tweakBox, int r_ID, string arrr)
        {
             ...
             string eventItems = GetEvents();
             ...
             log.cbEventItems = eventItems;
             ...
        }
person RobCroll    schedule 25.05.2016