Ваша переменная hourSalary - это строка, которую вы позже пытаетесь преобразовать в десятичное число, и это не удается.
Скорее всего, у вас либо пустое строковое значение, либо неверное значение.
В зависимости от ваших требований вы должны решить, что делать с недопустимым значением. В основном у вас есть две опции, кроме неудачи: Сохранить как значение по умолчанию (0 может быть?) Или сохранить как значение Null.
Если вы хотите сохранить значение по умолчанию, при преобразовании зарплаты вы можете попробовать следующее:
string hourSalary = gv.DataKeys[i].Values[1].ToString();
double salary = 0;
if (!double.TryParse(hourSalary, out salary))
{
salary = 0; // Set your default value here
}
row["Hour_Salary"] = salary;
Это обеспечит получение действительного десятичного значения, хранящегося в столбце Hour_Salary.
Если вы хотите сохранить нулевое значение, вы должны несколько изменить код:
string hourSalary = gv.DataKeys[i].Values[1].ToString();
double salary;
object salaryValue;
if (double.TryParse(hourSalary, out salary))
{
salaryValue = salary;
}
else
{
salaryValue = DBNull.Value; // Store as a null
}
row["Hour_Salary"] = salaryValue;
В этом примере мы делаем тот же TryParse, но если он не работает, мы сохраняем DBNull.Value вместо значения по умолчанию 0.