我目前正在從事圖書管理專案,我正在使用 Visual Studio 中的 SQL Server。我在資料庫中有一個 Book Category 表,我正試圖將它放在一個組合框中。
這是代碼 - 我看不出有什么問題,但類別需要很長時間才能在組合框中可見。
串列也是重復的,可能是因為while回圈嗎?如果是這樣,有什么辦法可以解決嗎?
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
try
{
con.ConnectionString = (@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\Users\malek\source\repos\BookStore\BookStore\BOOKDB.mdf;Integrated Security=True");
scmd.Connection = con;
con.Open();
scmd.CommandText = "SELECT CATEGORY FROM BOOKCAT";
var rd = scmd.ExecuteReader();
while (rd.Read())
{
List.Add(Convert.ToString(rd[0]));
}
int i = 0;
while (i < List.LongCount())
{
comboBox1.Items.Add(List[i]);
i = i 1;
}
}
catch (Exception EX)
{
MessageBox.Show(EX.Message);
}
finally
{
con.Close();
}
}
我錯過了什么?
注意:我沒有收到任何錯誤!
uj5u.com熱心網友回復:
資料系結是什么意思?
像這樣
var da = new SqlDataAdapter(
"SELECT DISTINCT CATEGORY FROM BOOKCAT ORDER BY CATEGORY"
@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\Users\malek\source\repos\BookStore\BookStore\BOOKDB.mdf;Integrated Security=True"
);
var dt = new DataTable();
da.Fill(dt);
categoryComboBox.DisplayMember = "CATEGORY";
categoryComboBox.ValueMember = "CATEGORY";
categoryComboBox.DataSource = dt;
當你想要用戶選擇的東西時:
var cat = categoryComboBox.SelectedValue as string;
簡單吧?
如果您使用強型別資料集,它會變得更加容易;為此,您只需將一個新的 DataSet 型別檔案添加到您的專案(必須使用 net framework 而不是 net core/5 ),將您的 db 拖到您的資料集中,將查詢添加到獲取不同類別的類別 TableAdapter(如上)然后打開資料源視窗,將類別更改為組合并將其標記到表單上。無需撰寫代碼;vs 會寫完
uj5u.com熱心網友回復:
根據您發布的代碼,看起來您正在從資料庫中加載類別,SelectedIndexChanged以防comboBox1.
因此,每次您從comboBox1執行此代碼中選擇一個新專案時;您將進入資料庫并從BOOKCAT表中加載所有內容,然后將這些專案放入ListandcomboBox1中。這就是為什么您會看到重復的類別。這可能也是為什么一個類別需要這么長時間才能在ComboBox.
您可能不想在ComboBox每次選定索引更改時從資料庫中加載專案,因此您應該在其他地方執行此操作。例如,您可以在Form' 建構式中或在'Load' 事件中執行此操作。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/429713.html
