【发布时间】:2018-04-27 18:48:33
【问题描述】:
我在尝试创建音乐库存系统时遇到了障碍。所以我有两个组合框(cb1 和 cb2)和一个列表框(lb)。用户从 cb1 中选择搜索音乐专辑是流派还是艺术家。然后 cb2 使用我在 VS 表设计器中创建的 SQL 数据库中的数据填充艺术家列表或流派列表,具体取决于 cb1 选择。最后,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;
}
然后这是填充 lb 的 cb2 事件处理程序:
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,它的值在cb1 的事件处理程序类中更改为“流派”或“艺术家”。我的代码哪里出了问题?
【问题讨论】:
-
我不明白这个问题。什么不工作?
-
花 15 分钟了解如何使用参数化语句和 SQL 参数正确创建查询。您的 SelectedIndex 无法知道用户是否还会从其他用户中进行选择,或者他们将按什么顺序选择它们。您需要一个按钮,以便他们可以告诉您 - '我已完成过滤器,这就是我想要的'
-
@DanWilson 填充列表框 lb 无法使用我拥有的任何代码
-
@Plutonix 在用户从第一个组合框中进行选择之前,第二个组合框不会启用,所以我确实拥有该控件
-
好吧,“它不起作用”的标准补救措施是 debug your code 并阅读 How to Ask 并获取 tour 以提供更有用的问题描述
标签: c# sql winforms windows-forms-designer