none
Преобразование типов в datagridview RRS feed

  • Вопрос

  • У меня есть таблица DataGridView1, пытаюсь из нее брать данные, чтоб дальше использовать их для расчетов в DataGridView3, и все хорошо пока в таблице не появляется дробное число, вылазит ошибка несоответствия типов. Пробовал разные методы преобразования, в т.ч. http://social.msdn.microsoft.com/Forums/ru-RU/csharpru/thread/bae21560-36a5-4256-88b3-5ede09336117., не помогло. Выкладываю код, все попытки преобразования выпилил чтоб лучше читалось.

            dataGridView3.Columns.Clear();
            dataGridView3.Rows.Clear();
            DataGridViewTextBoxColumn col0 = new DataGridViewTextBoxColumn();
            col0.HeaderText = "Ступень";
            col0.Name = "ID";
            DataGridViewTextBoxColumn col1 = new DataGridViewTextBoxColumn();
            col1.HeaderText = "Csum";
            col1.Name = "ID1";
            this.dataGridView3.Columns.Add(col0);
            this.dataGridView3.Columns.Add(col1);
            DataGridViewCell cel0 = new DataGridViewTextBoxCell();
            DataGridViewCell cel1 = new DataGridViewTextBoxCell();
            
            DataGridViewRow row = new DataGridViewRow();
            //Расчет: начало
            cel0.Value = dataGridView1.Rows[0].Cells[0].Value;
            double c0c =(dataGridView1.Rows[0].Cells[8].Value);
            double a = (dataGridView1.Rows[0].Cells[6].Value);
            double c1 = c0c / a;
            double c2 = (dataGridView1.Rows[0].Cells[1].Value);
            double c3 = (dataGridView1.Rows[0].Cells[2].Value);
            double en= (dataGridView1.Rows[0].Cells[9].Value);
            double c0e = (dataGridView1.Rows[0].Cells[7].Value);
            double gotn = (dataGridView1.Rows[0].Cells[5].Value);
            double ce = c0e / gotn;
            double ctr = (dataGridView1.Rows[0].Cells[3].Value);
            double cu = (dataGridView1.Rows[0].Cells[4].Value);
            double result = (c1 + c2 + c3) * en + ce + ctr + cu;
            cel1.Value = result;
            //Расчет: конец
            row.Cells.AddRange(cel0, cel1);
            this.dataGridView3.Rows.Add(row);
            cel0 = new DataGridViewTextBoxCell();
            cel1 = new DataGridViewTextBoxCell();
            row = new DataGridViewRow();
            cel0.Value = dataGridView1.Rows[1].Cells[0].Value;
            cel1.Value = "0";
            row.Cells.AddRange(cel0, cel1);
            this.dataGridView3.Rows.Add(row);
            cel0 = new DataGridViewTextBoxCell();
            cel1 = new DataGridViewTextBoxCell();
            row = new DataGridViewRow();
            cel0.Value = dataGridView1.Rows[2].Cells[0].Value;
            cel1.Value = "0";
            row.Cells.AddRange(cel0, cel1);
            this.dataGridView3.Rows.Add(row);
            cel0 = new DataGridViewTextBoxCell();
            cel1 = new DataGridViewTextBoxCell();
            row = new DataGridViewRow();
            cel0.Value = dataGridView1.Rows[3].Cells[0].Value;
            cel1.Value = "0";
            row.Cells.AddRange(cel0, cel1);
            this.dataGridView3.Rows.Add(row);
            cel0 = new DataGridViewTextBoxCell();
            cel1 = new DataGridViewTextBoxCell();
            row = new DataGridViewRow();
            cel0.Value = dataGridView1.Rows[4].Cells[0].Value;
            cel1.Value = "0";
            row.Cells.AddRange(cel0, cel1);
            this.dataGridView3.Rows.Add(row);
            cel0 = new DataGridViewTextBoxCell();
            cel1 = new DataGridViewTextBoxCell();
            row = new DataGridViewRow();
            cel0.Value = dataGridView1.Rows[5].Cells[0].Value;
            cel1.Value = "0";
            row.Cells.AddRange(cel0, cel1);
            this.dataGridView3.Rows.Add(row);
            cel0 = new DataGridViewTextBoxCell();
            cel1 = new DataGridViewTextBoxCell();
            row = new DataGridViewRow();
            cel0.Value = dataGridView1.Rows[6].Cells[0].Value;
            cel1.Value = "0";
            row.Cells.AddRange(cel0, cel1);
            this.dataGridView3.Rows.Add(row);
    

    • Перемещено Tagore Bandlamudi 1 октября 2010 г. 21:11 MSDN Forums consolidation (От:Visual C#)
    20 сентября 2010 г. 8:43

Ответы

Все ответы

  • Видимо проблема, в том, что у тебя в DGV данные отображаются с запятыми в качестве разделителя.

    Если не хочешь делать с таблицами, как в указанном выше примере, делай так:

    1. string double_stirng = Cell[x].Value.ToStriong();

    2. В double_stirng меняещь запятую на точку;

    3. double double_value = Double.Parse(double_stirng)

    • Предложено в качестве ответа ulcerModerator 21 сентября 2010 г. 4:08
    20 сентября 2010 г. 9:40
    Модератор
  • Все равно спотыкается об дробное значение, значение содержит точку:

     

     string 
    en_str= dataGridView1.Rows[0].Cells[9].Value.ToString();
     double
     en=double
    .Parse(en_str);
    
    FormatException was unhandled
    Входная строка имела неверный формат.

     

    В окне вывода:

    en 0.0
    en_str "0.15"
    dataGridView1.Rows[0].Cells[9].Value "0.15"

    двойные кавычки это нормально или от них надо избавляться?

    20 сентября 2010 г. 10:06
  • Всё, проблему решил сам:

    en_str=en_str.Replace(".",",");

    • Помечено в качестве ответа divizion 21 сентября 2010 г. 4:28
    21 сентября 2010 г. 3:12