FormatException при заполнении DataGridView - C#

470
26 февраля 2017, 06:55

Прошу помочь с 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();
Answer 1

Добавьте в вопрос значения, содержащиеся во всех упомянутых в коде 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; 
    ...
  } 
Answer 2

Очевидно, что какой-то метод из Convert не может преобразовать строку в требуемый тип, так как «строка имеет неверный формат». Обратите внимание на то, какое значение передается из свойства Text у TextBox.

Если есть необходимость конкретизировать формат строки, то воспользуйтесь методом принимающий экземпляр IFormatProvider, например: Convert.ToDouble(String, IFormatProvider).

READ ALSO
Заменить спрайт у дочернего объекта в Unity C#

Заменить спрайт у дочернего объекта в Unity C#

Всем приветЕсть задача, сделать кнопку с картинкой и чтобы при наведении на эту кнопку менялась картинка

477
Проблема с групировкой данных

Проблема с групировкой данных

Уже несколько дней бьюсь с проблемой группировки данныхПо примерам сделать не получается, либо группировка вообще не выводиться ни как,...

344
Проблема с обновлением приложения

Проблема с обновлением приложения

Писал автообновляемое приложение на C#, проблема возникла в запуске уже обновленного приложения

279