[英]C# (ADO.NET) Passing variables as constructor parameters
我有2个表格,类别和产品,它们连接到数据源(数据库)。
这个想法是,我希望应用程序首先加载表单类别,该表单显示有关现有类别的一些信息。
当我单击按钮产品时,产品表格应出现,在类别表格中显示当前所选类别名称和ID的产品
我已经完成了几乎所有的工作,但是我陷入了如何将类别ID和类别名称的值传递给产品表单中的值,然后显示相应数据的问题,
到目前为止,我创建了一个字符串变量,该字符串变量使用类别文本框的值textbox.text
,然后在表单产品中创建了类别表单的对象
然后我编写了这段代码,该代码连接到数据库,并从表“ products”中选择数据,其中id等于类别表单的id:
Categories cat = new Categories();
SqlCeConnection con = new SqlCeConnection("Data Source = Northwind40.sdf");
SqlCeDataAdapter da = new SqlCeDataAdapter("select * from products where [Category ID] = '" + cat.currID + "'", con);
DataSet ds = new DataSet();
da.Fill(ds, "Products");
BindingSource bs = new BindingSource(ds, "Products");
this.productsBindingSource = bs;
但是此代码仅向我显示一个结果,它只是所选类别ID的第一个产品
那我该怎么办呢?
这里的问题是您没有使用正确的“ Categories
表单实例。 您创建了一个新实例,该实例中将没有用户选择的任何ID值。
一种方法是在Product
表单中使用参数化构造函数。 然后,在“类别”表单中的“产品”按钮的按钮单击事件上:
Product productForm = new ProductForm("send selected values here");
在产品表单构造函数中,
string _selectedValues;
private Product(){
// Code here
}
public Product(string selectedValues):this(){
_selectedValues = selectedValues;
}
您可以根据需要选择参数的数据类型。
此查询' select * from products where [Category ID]...
可能仅返回一行的select * from products where [Category ID]...
。 尝试替换以下行:
//SqlCeDataAdapter da = new SqlCeDataAdapter("select * from products where [Category ID] = '" + cat.currID + "'", con);
用这一行:
SqlCeDataAdapter da = new SqlCeDataAdapter("select * from products", con);
确保一个类别有多个项目。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.