【问题标题】:Loading Sum on label在标签上加载总和
【发布时间】:2016-05-02 21:58:29
【问题描述】:

我正在尝试在 lblPriceToBe 上加载 txtQuantity.Text 和 lblPice.Text 的总和。我正在使用此代码加载我的 lblprice。

private void GetData()
{
    SqlConnection connection = new SqlConnection("Data Source = localhost\\SQLEXPRESS;Initial Catalog = MejOnlineManagementDB00;Integrated Security=True;");
    connection.Open();
    SqlCommand sqlCmd = new SqlCommand(@"SELECT price,productType
                                        FROM Products3
                                        WHERE productName='" + DropDownList1.SelectedItem.Value.ToString() + "'", connection);
    SqlDataReader rdr = sqlCmd.ExecuteReader();
    if (rdr.HasRows)
    {
        while (rdr.Read())
        {
            lblPrice.Text = rdr.GetValue(0).ToString(); //  if price is  string use GetString(0))
            lblProdType.Text = rdr.GetValue(1).ToString();
        }
    }
    connection.Close();
    //DropDownList End of Area
}

在我得到 mysql 数据库的价格后,我将它与 txtQuantity 相乘

protected void btnCalculate_Click(object sender, EventArgs e)
{
    double Quantity = Convert.ToDouble(txtQuantity.Text);
    double Price = Convert.ToDouble(lblPrice.Text);
    double sum;
    sum = Quantity * Price;
    //Output
    sum = Convert.ToDouble(lblPriceToBe.Text);
}

然后我得到这个错误

在 mscorlib.dll 中出现“System.FormatException”类型的异常,但未在用户代码中处理

附加信息:输入字符串的格式不正确。

这段代码的那一点:

sum = Convert.ToDouble(lblPriceToBe.Text);

【问题讨论】:

  • 你检查过“txtQuantity”的值吗?这大概就是它失败的原因。如果不确定输入值是否始终正确,也可以尝试使用double.TryParse(),它使用一个ref值进行更新,如果解析成功则返回一个布尔值。
  • @pkeuter 让我试试。
  • @pkeuter 我收到此错误“方法 'Try Parse' 没有重载需要 1 个参数”。
  • 查看函数的签名。您需要一个额外的参数,因为 tryparse 返回一个布尔值。查看@un-lucky 的答案,他用一段代码给出了相同的答案。这应该可以帮助你:-)

标签: c# mysql asp.net


【解决方案1】:

这意味着lblPriceToBe.Text 中的值不能转换为双精度值。它可能为空或任何其他我们无法转换为双精度的值。在这种特殊情况下double.TryParse将帮助您确定输入是否可转换,如果转换成功,它也会给您转换结果(否则将为0.0);所以你想做的是:

protected void btnCalculate_Click(object sender, EventArgs e)
{
    double Quantity,Price,sum;
    bool canProcess=true;
    if(!double.TryParse(txtQuantity.Text,out Quantity)
    {
      // conversion failed
      lblPriceToBe.Text="Invalid quantity"
      canProcess=false;
    }
    if(!double.TryParse(lblPriceToBe.Text,out Price)
    {
      // conversion failed
      lblPriceToBe.Text="Invalid Price"
      canProcess=false;
    }
    if(canProcess)
    {
    sum = Quantity * Price;
    //Output
    lblPriceToBe.Text=sum.ToString();
    }

}

【讨论】:

  • 它不再给我错误了。但是我能问一下为什么我的 lblPriceToBe.Text 上没有出现答案吗?
  • 您需要将结果分配给lblPriceToBe.Text 查看更新
  • 我尝试了代码。但答案仍然没有出现在 lblPriceToBe.Text 上。
  • 所以代码工作正常,标签的输入是问题,它不能被转换为双精度。检查该值
  • 所以我应该使用 mysql 查询,就像我在数据库上获取 lblprice 时使用的查询一样?
【解决方案2】:

在你的 Sql/mysql 服务器上运行查询并检查返回值,如果它确实尝试

在类的公共上声明这些变量

public double Quantity;
public double Price;
public double Sum;

然后通过查询给出它们的值:

 Quantity = Convert.ToDouble(rdr.GetValue("columns name"));
 Price = Convert.ToDouble(rdr.GetValue("columns name"));
 Sum = Quantity * Price ;

然后在你的文本框中使用它们

【讨论】:

  • 如果rdr.GetValue("columns name") 为空会怎样?
  • 它会显示一个错误,但你可以使用条件来检查
  • 您将在这里检查多少个条件?对于null / empty/ contains character 等等,为了避免这些,我使用double.TryParse 进行转换
  • null 使用 if (Quantity == null || Price == null || Sum == null )
  • 如果 Double 变量为 null(通过查询),则查询不返回任何值,因此变量将为 null ,即使您使用它们,在文本框中显示它们,它也不会返回错误 i刚才说如果你想确定值不为空
猜你喜欢
  • 1970-01-01
  • 2014-08-24
  • 1970-01-01
  • 2010-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-25
相关资源
最近更新 更多