Я столкнулся с дорожным блоком, пытаясь создать систему инвентаризации музыки. Итак, у меня есть два выпадающих списка (cb1 и cb2) и список (lb). Пользователь выбирает из cb1, искать ли музыкальный альбом по жанру или исполнителю. Затем cb2 заполняется либо списком исполнителей, либо списком жанров в зависимости от выбора cb1 с данными из базы данных SQL, которую я создал в конструкторе таблиц VS. Затем, наконец, lb заполняется данными, основанными на выборе в cb2, поэтому, например, если cb2 говорит «Pop», то lb заполняется альбомами в жанре «Pop». У меня есть cb1 и cb2 вниз, но я не могу заполнить lb комбинацией этих данных. Я сделал cb2 вручную, так как есть только «жанр» и «исполнитель», но у меня есть 7 жанров и 37 исполнителей, так что было бы слишком много избыточного кода, чтобы сделать его вручную.
Пока у меня есть классы, которые конвертируют GenreToAlbums и ArtistToAlbums:
public List<string> GenreToAlbums(String genre)
{
List<string> albums = new List<string>();
String s = "select name from Albums where genre = '" + genre + "'";
SqlConnection c = new SqlConnection(@"Data Source=ALYSSAUSF\SQLEXPRESS;Initial Catalog=UserData;Integrated Security=True");
SqlCommand cmd = new SqlCommand(s, c);
c.Open();
SqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
albums.Add((string)reader["name"]);
}
return albums;
}
public List<string> ArtistToAlbums(String artist)
{
List<string> albums = new List<string>();
String s = "select name from Albums where artist = '" + artist + "'";
SqlConnection c = new SqlConnection(@"Data Source=ALYSSAUSF\SQLEXPRESS;Initial Catalog=UserData;Integrated Security=True");
SqlCommand cmd = new SqlCommand(s, c);
c.Open();
SqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
albums.Add((string)reader["name"]);
}
return albums;
}
И затем это обработчик событий cb2 для заполнения lb:
private void comboBox2_SelectedIndexChanged(object sender, EventArgs e)
{
if (ClassItems.selectedItem == "Genre")
{
String selectedGenre = comboBox2.SelectedItem.ToString();
List<string> albums = GenreToAlbums(selectedGenre);
listBox1.DataSource = albums;
listBox1.DisplayMember = "name";
}
else if (ClassItems.selectedItem == "Artist")
{
String selectedArtist = comboBox2.SelectedItem.ToString();
List<string> albums = ArtistToAlbums(selectedArtist);
listBox1.DataSource = albums;
listBox1.DisplayMember = "name";
}
}
У меня есть открытый класс ClassItems
, который обрабатывает глобальную переменную SelectedItem, значение которой изменяется на "Genre" или "Artist" в классе обработчика событий для cb1. Где проблема в моем коде?