Заполнение двух combobox из одного файла

345
22 февраля 2017, 19:34

Добрый день. Помогите понять, как заполнить combobox с условием. Есть список авторов книг. Пушкин, Толстой, Грибоедов и так далее. Они помещаются в combobox1. Есть список произведении у Пушкина 2-3 произведения, у Толстого и так далее. Количество произведении помещается в combobox2. К примеру в combobox1 я выбираю Пушкина а в combobox2 уже список только его произведении. И так далее с остальными писателями. В одном combobox авторы а в другом их книги. И возможно ли произвести чтение содержимого для combobox 1-2 из одного файла?

Answer 1

Можно обойтись без БД. Для этого надо создать класс Author, в котором будет имя и фамилия автора, а также все его книги. И класс Book, в котором будет хранится название книги.

Класс Author

public class Author
{
    private List<Book> books;
    public Author()
    {
        books = new List<Book>();
    }
    public string Name { get; set; }
    public string Surname { get; set; }

    public void AddBook(Book book)
    {
        books.Add(book);
    }
    public List<Book> GetBooks()
    {
        return books;
    }
    public override string ToString()
    {
        return string.Format("{0} {1}", Name, Surname);
    }
}

Класс Book

public class Book
{
    public string Title { get; set; }
    public override string ToString()
    {
        return Title;
    }
}

После этого надо будет создать List (или любой другой контейнер) с глобальной областью видимости.

При чтении из файла, необходимо будет создать объект класса Author и добавить в него все книги автора (объекты класса Book), после добавить в List, созданный ранее. [authors - List с глобальной областью видимости, в котором хранятся все авторы+их книги]

Пример

Author a1 = new Author { Name = "A.", Surname = "Пушкин" };
a1.AddBook(new Book { Title = "Руслан и Людмила" });
a1.AddBook(new Book { Title = "Евгений Онегин" });
authors.Add(a1);

К combobox1 добавить событие SelectedIndexChanged, в котором будет происходить получение индекса из combobox1 и вывод всех книг автора в combobox2.

Код для события SelectedIndexChanged

int index = comboBox1.SelectedIndex;
if (index < 0 && index >= authors.Count) return;  //проверка, чтобы индекс не находился за границами массива
comboBox2.Items.Clear();      //очистка combobox2, чтобы не было книг других авторов
foreach(Book b in authors[index].GetBooks())
{
    comboBox2.Items.Add(b);
}
READ ALSO
Закрасить текст, слово, букву

Закрасить текст, слово, букву

Доброго времени суток

269
Вопрос о входных параметрах?

Вопрос о входных параметрах?

Вроде как все верно, но компилятор ругается

317
Как добавить описание элементам enum в C#?

Как добавить описание элементам enum в C#?

Есть описанное перечислениеНапример:

448