【问题标题】:Adding value after retrieving from database从数据库中检索后添加值
【发布时间】:2013-02-17 05:56:47
【问题描述】:

在我的 Windows 应用程序中,我在存储产品价值的数据库中有价格列。

在我的 winform 中,我有一个组合框和列表框。组合框显示数据库中的所有项目。当用户从组合框中选择产品并单击添加时,这些产品将被添加到列表框中。

同时,当用户单击添加项目时,我检索项目的价格并将其传递给添加此值的方法。

但是如何添加多个值,例如我将产品 1、产品 2 从组合框添加到列表框,我想将这些项目的值添加为 550+200 = 750 并将其显示到文本框中。

目前我正在这样做。

要检索价格:

public DataSet searchforPrice(string price)
        {
            DataSet dataSet = new DataSet();

            // Create connection object
            OleDbConnection oleConn = new OleDbConnection(connString);
            try
            {
                oleConn.Open();
                string sql = "SELECT [Price]  FROM [Product] WHERE [Product Name] ='" + price + "'";
                OleDbDataAdapter dataAdapter = new OleDbDataAdapter(sql, oleConn);
                dataAdapter.Fill(dataSet, "Product");

            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
            finally
            {
                oleConn.Close();
            }
            return dataSet;

  }

将项目添加到列表框并显示总价:

private void button2_Click(object sender, EventArgs e)
        {
            listBox1.Items.Add(comboBox2.Text);
            maskedTextBox10.Text = addPrice().ToString();

        }

在组合框中添加正在选择的产品的价格

public int addPrice()
    {
        DataSet ds = searchforPrice(comboBox2.Text);
        int price =  Convert.ToInt32(ds.Tables[0].Rows[0]["Price"]);
        return price;

    }

【问题讨论】:

  • 您的代码需要做一些工作。首先,查看“using”语句,它将帮助您无需显式使用 try/finally。该方法的参数名为“price”,但它是针对名为“Product Name”的数据库字段进行过滤的。您应该重命名该参数。您还需要考虑使用参数化查询来防止任何特殊字符和 SQL 注入漏洞。您的方法名称以小写开头,C# 编码约定建议方法名称为 PascalCased,这与 Java 的 camelCased 约定不同。

标签: c# winforms add


【解决方案1】:

searchforPrice 方法的参数应该称为 product 而不是 price。

现在,您的addPrice 方法是错误的,因为它不会增加任何价格。它只返回组合中当前选定项目的价格。它应该看起来像这样:

public int addPrice()
{
    DataSet ds = searchforPrice(comboBox2.Text);
    int sum = Convert.ToInt32(maskedTextBox10.Text);
    int price =  Convert.ToInt32(ds.Tables[0].Rows[0]["Price"]);
    return sum + price;
}

当然,如果你删除项目,你应该做类似的事情。

IMO,而不是应用此逻辑,您应该将每个项目的价格存储在列表中,并在文本框中显示这些价格的总和。如果您删除项目,重新计算总和会更容易(也更正确)。

【讨论】:

  • 我收到错误“输入字符串的格式不正确。”在 int sum = Convert.ToInt32(maskedTextBox10.Text) 最初 maskedTextBox 是空的。有什么办法可以避免
  • 好吧,我怎么知道你的输入是什么?就是这个想法,你应该注意细节。顺便说一句,你应该使用int.TryParse()。这个函数不会抛出异常。
猜你喜欢
  • 1970-01-01
  • 2013-04-29
  • 1970-01-01
  • 1970-01-01
  • 2016-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多