我遇到了一个问题,我想用列表中的项目填充组合框。该列表从我的数据库中获取项目。
问题是组合框只填充了数据库中的最后一条记录。
示例:如果我的数据库中有5条记录,其中包含5个不同的ID:1,2,3,4,5。然后组合框只显示Id 5,五次。像这样:5-5-5-5-5。我想要的是:1-2-3-4-5。
这可能是一个小错误,我试图研究和测试不同的东西但没有任何效果。非常感谢任何帮助。提前谢谢。
下面的代码来自我认为问题所在的数据库类,它用我的数据库中的项填充我的列表:
public static List<Product> getProducts()
{
List<Product> listProducts= new List<Product>();
try
{
connection = new SqlConnection("Data Source=localhost\\SQLEXPRESS;Initial Catalog=DB_Products;Integrated Security=SSPI;");
connection.Open();
SqlCommand selectProductNumber = new SqlCommand(@"Select ProductNumber FROM Product", connection);
SqlDataReader dr = selectProductNumber.ExecuteReader();
while (dr.Read())
{
Product product = new Product();
product.ProductNumber = dr["ProductNumber"].ToString();
listProducts.Add(product);
}
dr.Close();
dr.Dispose();
return listProducts;
}
finally
{
if (connection != null)
{
connection.Close();
}
}
}
以下是填充组合框的方法以及我在哪里使用方法:
private ProductList productList = new ProductList();
private void FillComboBox()
{
comboBox.Items.Clear();
for (int i = 0; i < productList.Count; i++)
{
comboBox.Items.Add(productList[i].GetProductNumber(" \t "));
}
}
private void Form1_Load(object sender, EventArgs e)
{
productList.Fill();
FillComboBox();
}
从我的ProductList类:
public void Fill()
{
productList = DB_class.getProducts();
}
public Product this[int index]
{
get
{
return productList[index];
}
}
public void Add(Product product)
{
productList.Add(product);
}
public int Count
{
get { return productList.Count; }
}
从我的产品类:
public string GetProductNumber(string showProductNumber)
{
return ProductNumber;
}
答案 0 :(得分:1)
试试这个。更改FillComboBox
方法,如下所示
private void FillComboBox()
{
comboBox.Items.Clear();
List<Product> proList = getProducts();
for (int i = 0; i < proList.Count; i++)
{
comboBox.Items.Add(proList[i]);
}
}
答案 1 :(得分:0)
这不是您问题的直接答案,但它可以解决您的问题。 如果将“Linq to Sql”(。dbml)文件添加到项目中。简单地从服务器资源管理器中拖动您需要的表 - 然后您可以像这样解决它。
private void button1_Click(object sender, EventArgs e)
{
var DBcontext = new DBDataContext();
comboBox1.ValueMember = "ID";
comboBox1.DisplayMember = "Description";
comboBox1.DataSource = DBcontext.Items.ToList();
comboBox1.SelectedIndex = 0;
DBcontext.Dispose();
}
private void button2_Click(object sender, EventArgs e)
{
//Get displaytext
MessageBox.Show(comboBox1.Text);
//Get id value
MessageBox.Show(comboBox1.SelectedValue.ToString());
}
//如果你想要你的方法,你应该这样做
class Product
{
public string ProductNumber { get; set; }
public override string ToString()
{
return ProductNumber;
}
}
private List<Product> productList = new List<Product>();
productList = GetProducts(); //your sql function.
private void FillComboBox()
{
comboBox1.Items.Clear();
foreach (var p in productList)
{
comboBox1.Items.Add(p);
}
}