C# 从数据库中选择记录列表,并以-c格式显示
我正在尝试创建一个收据,希望列出每个产品名称和成本,以向客户显示他们购买了什么,并最终包括数量 我想从数据库中为每个产品选择产品名称和成本,并显示每个产品及其成本 我无法让它工作,因为它一直显示交易中的最后一个产品-我如何才能获得交易中的所有产品 如果你对我想做的事情有任何疑问,尽管问,我会回答C# 从数据库中选择记录列表,并以-c格式显示,c#,sql,C#,Sql,我正在尝试创建一个收据,希望列出每个产品名称和成本,以向客户显示他们购买了什么,并最终包括数量 我想从数据库中为每个产品选择产品名称和成本,并显示每个产品及其成本 我无法让它工作,因为它一直显示交易中的最后一个产品-我如何才能获得交易中的所有产品 如果你对我想做的事情有任何疑问,尽管问,我会回答 SqlCommand searchProduct = new SqlCommand(@"SELECT ProductName, Cost FROM dbo.NCAProduct WHERE Produc
SqlCommand searchProduct = new SqlCommand(@"SELECT ProductName, Cost FROM dbo.NCAProduct WHERE ProductCode = " + productCode, sqlConnect);
try
{
//sqlConnect.Open();
SqlDataReader dr4 = searchProduct.ExecuteReader();
if (dr4.HasRows)
{
while (dr4.Read())
{
label10.Text = dr4["ProductName"].ToString() + " ";
label13.Text = dr4["Cost"].ToString() + " ";
}
}
dr4.Close();
}
catch (SqlException error2)
{
MessageBox.Show(error2.ToString());
}
定义产品类别
public Product
{
public ProductName{get;set;}
public Cost{get;set;}
}
从数据库检索数据时,请使用以下命令:
public List<Product> GetProductList()
{
//sqlConnect.Open();
SqlDataReader dr4 = searchProduct.ExecuteReader();
List <Product> products = new List<Product>();
//your method should return products
if (dr4.HasRows)
{
while (dr4.Read())
{
Product myP = new Product();
myP.ProductName = dr4["ProductName"].ToString() + " ";
myP.Cost = dr4["Cost"].ToString() + " ";
Products.Add(myP);
}
}
dr4.Close();
return products;
}
希望这有帮助 如上所述,您的标签文本每次都会被覆盖,因此只显示最后一项。如果您想显示一个很长的项目列表,那么最好使用datatable来存储您的项目。如果您使用的是asp.net,则可以绑定到gridview以显示它们,而不是标签。以下是如何使用数据表:
DataTable dt = new DataTable();
DataColumn c = new DataColumn();
c.DataType = typeof(string);
c.Name = "Product Name";
dt.Columns.Add(c);
c = new DataColumn();
c.DataType = typeof(decimal);
c.Name = "Cost";
dt.Columns.Add(c);
while (dr4.Read())
{
DataRow r = dt.NewRow();
r["Product Name"] = dr4["ProductName"].ToString();
r["Cost"] = dr4["Cost"].ToString();
dt.Rows.Add(r);
}
如果你不顾一切地想使用标签,尽管我不明白为什么在这种情况下你会选择无限数量的行,你可以为每个产品创建一个新标签,并将其添加到你的aspx页面上的面板中
while (dr4.Read())
{
Label MyLabel = new Label();
MyLabel = dr4["ProductName"].ToString() + " ";
MyLabel += dr4["Cost"].ToString();
MyPanel.Controls.Add(MyLabel);
}
要使用它,您需要在aspx页面上创建一个名为MyPanel的面板,以将标签添加到其中。要添加样式等,您可以在创建新标签时执行此操作,也可以对标签应用一个类,并使用css向该类的标签添加样式。label13.Text=dr4[Cost].ToString+;每次都将替换文本,因此列表上的最后一个当然是最后一个留在Labels中的文本。我可以使用什么来解决这个问题?您只需为查询返回的每一行覆盖label10和label13的内容。根据定义,最后一行将显示。你希望你的代码做什么?我希望它显示选中的每一行,然后在网格中显示你的数据或添加更多标签。我尝试不使用网格视图,因为它是用于屏幕上的收据-我认为标签看起来更像realistic@user3461835-标签如何比gridview更逼真?gridview在大多数情况下都具有足够的通用性,并且会附带您可能希望使用的全部附加功能,例如分页、排序等@user3461835-这些功能有帮助吗?
DataTable dt = new DataTable();
DataColumn c = new DataColumn();
c.DataType = typeof(string);
c.Name = "Product Name";
dt.Columns.Add(c);
c = new DataColumn();
c.DataType = typeof(decimal);
c.Name = "Cost";
dt.Columns.Add(c);
while (dr4.Read())
{
DataRow r = dt.NewRow();
r["Product Name"] = dr4["ProductName"].ToString();
r["Cost"] = dr4["Cost"].ToString();
dt.Rows.Add(r);
}
while (dr4.Read())
{
Label MyLabel = new Label();
MyLabel = dr4["ProductName"].ToString() + " ";
MyLabel += dr4["Cost"].ToString();
MyPanel.Controls.Add(MyLabel);
}