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);
}