winforms 输入字符串的格式不正确- Convert.ToDouble(dr)[已关闭]

guz6ccqo  于 2023-01-14  发布在  其他
关注(0)|答案(1)|浏览(175)

**已关闭。**此问题需要debugging details。当前不接受答案。

编辑问题以包含desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将有助于其他人回答问题。
昨天关门了。
Improve this question
在一个公共的空白我有这个代码下面。我试图输入信息,它将应该进入数据网格视图,但相反,它说,输入字符串是不是在正确的格式。我将如何解决这个问题?

Boolean hasPurchase = false;
int i =0;
double total = 0;
double discount = 0;
double totalDiscount = 0;
double vatTotal = 0;
double vatDiscount = 0;
dgvCash.Rows.Clear();
cn.Open();
cm = new SqlCommand("SELECT p.ID_Purchase, p.ID_Medicine, m.BrandName, m.GenericName, p.Price, p.Quantity, p.DiscountedQuantity, p.Discount, p.NormalDiscountTotal, p.VatDiscount, p.VatTotal, p.Total from tblPurchase AS p INNER JOIN tblMedicine AS m ON p.ID_Medicine = m.ID_Medicine WHERE p.TransactionNumber LIKE @TransactionNumber and p.Status LIKE 'Pending'", cn);
cm.Parameters.AddWithValue("@TransactionNumber", lblTransNo.Text);
dr = cm.ExecuteReader();
while (dr.Read())
{
    i++;
    total += Convert.ToDouble(dr["Total"].ToString());
    discount += Convert.ToDouble(dr["Discount"].ToString());
    totalDiscount += Convert.ToDouble(dr["NormalDiscountTotal"].ToString());
    vatTotal += Convert.ToDouble(dr["VatTotal"].ToString());
    vatDiscount += Convert.ToDouble(dr["VatDiscount"].ToString());
    dgvCash.Rows.Add(i, dr["ID_Purchase"].ToString(), dr["ID_Medicine"].ToString(), dr["BrandName"].ToString(), dr["GenericName"].ToString(), dr["Price"].ToString(), dr["Quantity"].ToString(), dr["DiscountedQuantity"].ToString(), dr["Discount"].ToString(), dr["NormalDiscountTotal"].ToString(), dr["VatDiscount"].ToString(), dr["VatTotal"].ToString(), double.Parse(dr["Total"].ToString()).ToString("#,##0.00"));
    hasPurchase = true;
}
dr.Close();
cn.Close();
7jmck4yq

7jmck4yq1#

试试这个方法,我只解析总计行,如果需要,您可以将此逻辑应用于每一行:

double total = 0;
total += Double.TryParse(dr["Total"].ToString(), out double dTotalValue) 
? dTotalValue : 0;

这是一个三元值。如果tryparse返回true,这是因为它所采用的值是double类型,则它将采用问号后面的第一个值作为true。如果它返回false(表示它无法解析double),则它将采用第二个值/默认值。tryparse可用于大多数类型。
在我看来这是最好的方法,因为它不会真的失败。如果total在数据库中可以为空,则在?.ToString()中添加一个问号,这样它只在不为空时才运行。
它的工作方式是,如果它解析你的db值失败,它默认为0.00,而不是抛出一个错误。只要你实际上提供了可以是你的tryparse类型的东西,这就是失败证明。如果它不工作,你提供的值没有解析,因为它不可能是你要把它变成的类型。

相关问题