繁体   English   中英

C#(ADO.NET)将变量作为构造函数参数传递

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM