Отделить Socket & cpu_name

Уже задавал данный вопрос, так и не разобрался. Прошу помочь, понимающих людей.

Ссылка на вопрос: Отделить socket от CPU_name

Что я сейчас имею: Есть

Что мне нужно: Нужно

Также я, скорее всего, разобрался почему так происходит, но не могу придумать, как это исправить:

//получаем данные
            _records = SOCKETsIntel.GetSOCKETintelValues();

            //заполняем комбобокс сокетов
                _bsSockets.Add(_socketAll);
                _records.Select(r => r.Socketintel)
                        .Distinct()
                        .ToList()
                        .ForEach(s => _bsSockets.Add(s));

            //заполняем комбобокс процессоров
            UpdateComboBoxCpus(_socketAll);

            //подписка на событие выбора в комбобоксе сокетов
            _bsSockets.CurrentChanged += (s, a) => UpdateComboBoxCpus(_bsSockets.Current as String);

// Sobitie dlya Updata ComboboxCPUs
        private void UpdateComboBoxCpus(string selectedValue)
        {
            _bsCpus.Clear();

            if (selectedValue.Equals(_socketAll))
            {
                //полный список
                _records.ForEach(r => _bsCpus.Add(r));
            }
            else
            {
                //список с выборкой по сокету
                _records.Where(r => r.Socketintel.Equals(selectedValue))
                        .ToList()
                        .ForEach(r => _bsCpus.Add(r));
            }
        }

После отладки данного блока кода я получил то, что, при выполнении проверки if (selectedValue.Equals(_socketAll)), оно выполняет его, потом кидает вверх на:

//подписка на событие выбора в комбобоксе сокетов
            _bsSockets.CurrentChanged += (s, a) => UpdateComboBoxCpus(_bsSockets.Current as String); 

И по итогу выполняет блок:

                _records.Select(r => r.Socketintel)
                        .Distinct()
                        .ToList()
                        .ForEach(s => _bsSockets.Add(s)); 

По новой...

Пробовал делать Clear, вот так: Пробовал, но оно удаляет все, уже понял, что это не выход. Надеюсь на поддержку.


Ответы (1 шт):

Автор решения: Andrew

Раз вся информация сохранена в CSV, то решение нереально простое.

Я как-то создавал тему: Как просто работать с / открыть / изменить / сохранить Excel - xlsx / CSV файлы

Именно эту библиотеку я и буду использовать в ответе.

List<String> processors = new List<String>()
List<String> sockets = new List<String>()

Csv csv = new Csv();

csv.FileOpen("c:\\file1.csv");

foreach( var row in csv)
{
    if row.lenght == 2 // если в строке 2 ячейки
    {
       processors.add(row[0]);//первая ячейка строки
       sockets.add(row[1]);   // вторая ячейка строки
    }
       
}

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

И, конечно же, ты можешь всовывать эти данные не в 2 списка, а, скажем, в дикшонари или в собственный инстанс класса. Вобщем - как тебе удобнее, это просто пример и не более того.

Ну и перед тем как ассайнить список вариантов в комбо-бокс не забывай очищать старый список вариантов. Вот, собственно, все что нужно сделать.

→ Ссылка