Как искать файл и отображать его в списке? - PullRequest
0 голосов
/ 04 мая 2019

Я застрял в проекте C # и не знаю, как его решить. У меня есть текстовый файл "cars.txt", и он имеет эту информацию:

1950
Nissan Sentra
Форд Фокус
1951
Mazda5
Mazda3
Toyota
1952
Шевроле

У меня должно быть 2 списка и одна кнопка. Первое поле списка предназначено для поиска по файлу и заполнения лет, а когда пользователь выбирает год и нажимает кнопку, на нем отображаются соответствующие модели автомобилей для этого конкретного года. У меня есть мысли об использовании StreamReader, но я не знаю, как начать. Ваша помощь оценена

Ответы [ 2 ]

1 голос
/ 04 мая 2019

Создайте словарь строковых списков, который будет содержать списки машин с указанием года и ключа:

private readonly Dictionary<int, List<string>> _carsByYear =
    new Dictionary<int, List<string>>();
private readonly List<int> _years = new List<int>();

Затем вы можете заполнить его

List<string> cars = null;
foreach (string line in File.ReadLines(@"C:\Users\Me\cars.txt")) {
    if (!String.IsNullOrWhiteSpace(line)) {
        if (Int32.TryParse(line, out int year)) { // We have a year
            if (_carsByYear.TryGetValue(year, out var existingList)) {
                cars = existingList; 
            } else {
                 // Add a new list with year as the key
                _years.Add(year);
                cars = new List<string>();
                _carsByYear.Add(year, cars);
            }
        } else { // We have a car
            cars.Add(line);
        }
    }
}

Теперь вы можете назначить _years на DataSource первого ListBox.Вы можете получить выбранный год (SelectedIndexChanged событие) с помощью

int year = (int)listBox1.SelectedItem;

. В этом году вы можете получить список автомобилей с помощью

var selectedCarList = _carsByYear[year];

. Присвойте его DataSource извторой ListBox.

0 голосов
/ 04 мая 2019

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

У меня отлично работает. Вот вариант с некоторыми примерами его использования:

enter image description here

private readonly SortedList<int, SortedSet<string>> _carsByYear = new SortedList<int, SortedSet<string>>();

private void button1_Click(object sender, EventArgs e)
{
    SortedSet<string> cars = null;
    string fileName = System.IO.Path.Combine(
        System.Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments),
        "cars.txt");

    foreach (string line in File.ReadLines(fileName))
    {
        if (!String.IsNullOrWhiteSpace(line))
        {
            if (Int32.TryParse(line, out int year))
            {   // We have a year
                if (!_carsByYear.ContainsKey(year))
                {
                    cars = new SortedSet<string>();
                    _carsByYear.Add(year, cars);
                }
                else
                {
                    cars = _carsByYear[year];
                }
            }
            else
            {   // We have a car
                if (!cars.Contains(line))
                {
                    cars.Add(line);
                }                    
            }
        }
    }
    listBox1.DataSource = _carsByYear.Keys.ToList();
}

private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
    if (listBox1.SelectedIndex != -1)
    {
        listBox2.DataSource = _carsByYear[(int)listBox1.SelectedItem].ToList();
    }
}

private void button2_Click(object sender, EventArgs e)
{
    if (listBox1.SelectedIndex != -1 && listBox2.SelectedIndex != -1)
    {
        int year = (int)listBox1.SelectedItem;
        string car = listBox2.SelectedItem.ToString();

        label1.Text = year.ToString();
        label2.Text = car;
    }
    else
    {
        label1.Text = "";
        label2.Text = "";
    }
}

Если вы все еще не можете заставить его работать, сообщите MORE DETAILS о содержимом файла и о том, как вы должны использовать его в своем интерфейсе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...