Прошу помочь с DataGridViev. Мне нужно, чтобы была таблица в 2 столбца с ранее указанным количеством строк (gg). В 1-м столбце должны быть номера по порядку, а во второй значения температур по формулам.
Моя попытка решения внизу. В ней при нажатии кнопки "заполнить таблицу" (button 4) программа вылетает с ошибкой:
Необработанное исключение типа "System.FormatException" в mscorlib.dll
Дополнительные сведения: Входная строка имела неверный формат.
Код:
int gg = Convert.ToInt32(textBox2.Text);
double
z_pnd = Convert.ToDouble(textBox4.Text),
z_pvd = Convert.ToDouble(textBox3.Text),
t_kond = Convert.ToDouble(textBox8.Text),
t_dear = Convert.ToDouble(textBox9.Text),
t_oe = Convert.ToDouble(textBox10.Text),
t_egu = Convert.ToDouble(textBox11.Text),
z = Convert.ToDouble(textBox2.Text),
alfa = 0.9, tp_pereddear = t_dear - 10,
t_nach = Convert.ToDouble(textBox6.Text),
p_pg = Convert.ToDouble(textBox7.Text),
t_pv = ((t_nach - t_kond - t_oe - t_egu) / (z + 1)),
t_pvopt = t_nach - t_pv,
t_pvek = alfa * (t_pvopt - t_kond) + t_kond,
delt_pvd = (t_pvek - t_dear) / z_pvd,
delt_pnd = (tp_pereddear - t_kond - t_oe - t_egu) / z_pnd;
double[] x = new double[gg];
double[] y = new double[gg];
for (int i = 0; i <= gg - 1; i++)
{
if (i == 0)
{
x[i] = 1;
y[i] = (t_kond + t_oe + t_egu + t_pv);
}
else
{
y[0] = (t_kond + t_oe + t_egu + t_pv);
x[i] = (i + 1);
y[i] = (y[0] + t_pv*i);
}
{
dataGridView1.Rows[i].Cells[0].Value = x[i].ToString();
dataGridView1.Rows[i].Cells[1].Value = y[i].ToString();
Добавьте в вопрос значения, содержащиеся во всех упомянутых в коде textBoxxxx.
Проверяйте все строки, которые должны содержать числа:
(Ну и нельзя же так поступать с людьми. Что у Вас творится в цикле?)
private bool CheckInput_Int(TextBox aControl)
{
int value;
return int.TryParse(aControl.Text, out value);
}
private bool CheckInput_Double(TextBox aControl)
{
double value;
bool result = double.TryParse(aControl.Text, out value);
if (!result)
MessageBox.Show(string.Format("Could not convert text [{0}] from control {1} to number.", aControl.Text, aControl.Name),
"Error!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
return result;
}
private void button4_Click(object sender, EventArgs e)
{
if (!CheckInput_Int(textBox2) ||
!CheckInput_Double(textBox4) ||
!CheckInput_Double(textBox3) ||
!CheckInput_Double(textBox8) ||
!CheckInput_Double(textBox9) ||
!CheckInput_Double(textBox10) ||
!CheckInput_Double(textBox11) ||
!CheckInput_Double(textBox6) ||
!CheckInput_Double(textBox7)) {
MessageBox.Show("Проверьте значения полей!", "Внимание!",
MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
return;
}
...
double yBase = t_kond + t_oe + t_egu + t_pv;
for (int i = 0; i < gg; i++)
{
x[i] = i + 1;
y[i] = yBase + t_pv * i;
...
}
Очевидно, что какой-то метод из Convert не может преобразовать строку в требуемый тип, так как «строка имеет неверный формат». Обратите внимание на то, какое значение передается из свойства Text у TextBox.
Если есть необходимость конкретизировать формат строки, то воспользуйтесь методом принимающий экземпляр IFormatProvider, например: Convert.ToDouble(String, IFormatProvider).
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники