помогите пожалуйста, не понятная причина Format Exception
Вот примерно так:
Код:
private void comboBox2_SelectedIndexChanged_1(object sender, EventArgs e)
{
var selectCd = (sender as ComboBox).SelectedValue;
if (selectCd != null)
{
var selName = this.база_данных1DataSet.name.FindByКод((int)selectCd);
textBox28.Text = selName.Cv.ToString();
textBox33.Text = selName.Cp.ToString();
xTb.Text = selName.x.ToString();
qTb.Text = selName.q.ToString();
yTb.Text = selName.y1.ToString();
mTb.Text = selName.m.ToString();
}
}
{
var selectCd = (sender as ComboBox).SelectedValue;
if (selectCd != null)
{
var selName = this.база_данных1DataSet.name.FindByКод((int)selectCd);
textBox28.Text = selName.Cv.ToString();
textBox33.Text = selName.Cp.ToString();
xTb.Text = selName.x.ToString();
qTb.Text = selName.q.ToString();
yTb.Text = selName.y1.ToString();
mTb.Text = selName.m.ToString();
}
}
программа валится при попытке конвертировать в double.
вот пример кода:
Код:
double diam, t, v, vr, s, mkr, p, tR, nr, nachDiam, konDiam, kilkOb,
cp, cv, q, x, y, T, dsver, m;
kilkOb = Convert.ToDouble(_kilkOb.Text); //данные НЕ из БД
nachDiam = Convert.ToDouble(_nachDiam.Text); //данные НЕ из БД
konDiam = Convert.ToDouble(_konDiam.Text); //данные НЕ из БД
cp = Convert.ToDouble(Cp.Text); //данные из БД (валится и дальше не идет)
cv = Convert.ToDouble(Cv.Text); //данные из БД
q = Convert.ToDouble(qTb.Text); //данные из БД
x = Convert.ToDouble(xTb.Text); //данные из БД
y = Convert.ToDouble(yTb.Text); //данные из БД
//T = Convert.ToDouble(stoiTb.Text); //данные из БД
//dsver = Convert.ToDouble(dSver.Text);
m = Convert.ToDouble(mTb.Text);
t = Convert.ToDouble(_glubOtv.Text);
v = (pi * konDiam * kilkOb) / 1000;
...
cp, cv, q, x, y, T, dsver, m;
kilkOb = Convert.ToDouble(_kilkOb.Text); //данные НЕ из БД
nachDiam = Convert.ToDouble(_nachDiam.Text); //данные НЕ из БД
konDiam = Convert.ToDouble(_konDiam.Text); //данные НЕ из БД
cp = Convert.ToDouble(Cp.Text); //данные из БД (валится и дальше не идет)
cv = Convert.ToDouble(Cv.Text); //данные из БД
q = Convert.ToDouble(qTb.Text); //данные из БД
x = Convert.ToDouble(xTb.Text); //данные из БД
y = Convert.ToDouble(yTb.Text); //данные из БД
//T = Convert.ToDouble(stoiTb.Text); //данные из БД
//dsver = Convert.ToDouble(dSver.Text);
m = Convert.ToDouble(mTb.Text);
t = Convert.ToDouble(_glubOtv.Text);
v = (pi * konDiam * kilkOb) / 1000;
...
вообще не могу понять в чем проблема. есть мысль, что при нажатии на баттн, оно очищает поля, но я этого в коде не видел..
есть еще мысль.
в бд все числа стоят как Х,Х то есть разделитель между целой и дробной частью запятая, не точке. может в этом проблема?
В качестве эксперимента попробуй Convert.ToDouble(F(xTb.Text)); где F() - заменяет разделитель
для C#:
Код:
double numer = 2.4;
Код:
double numer = Convert.ToDouble("2,3");
Попробуйте так сделать для числа:
Код:
string line = "5.4";
line = line.Replace(".", ",");
double numer = Convert.ToDouble(line);
line = line.Replace(".", ",");
double numer = Convert.ToDouble(line);
Код:
var format1 = System.Globalization.NumberFormatInfo.InvariantInfo;
var value1 = double.Parse("1.23", format1);
var format2 = System.Globalization.NumberFormatInfo.CurrentInfo;
var value2 = double.Parse("1,23", format2);
var value1 = double.Parse("1.23", format1);
var format2 = System.Globalization.NumberFormatInfo.CurrentInfo;
var value2 = double.Parse("1,23", format2);
Учитесь у Der Meister'а.
В БД числа хранятся именно как числа (во всяком случае должны), и понятие десятичный разделитель появляется только при взаимодействии с гуем.
Хинт: рекомендую для ввода/вывода чисел использовать не TextBox, а NumericUpDown.
kooder согласен, но как говориться: век живи век учись :)
спасибо за советы, я просто дураком оказался.. по глупости ошибся текстбоксом и пытался считать значения с лейбла, а не с текстбокса...(( просто до этого две ночи не спал.. вот и вышло так. но спасибо за советы. т.к. я новичок, возьму на вооружение.