Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
 Аватар для MAXONline
3 / 3 / 0
Регистрация: 15.12.2014
Сообщений: 77

DataGridView казус с "-" (минусом)

14.05.2016, 20:09. Показов 1004. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Не понимаю что с логикой. Верхнюю часть считает верно. А нижнюю я отсек значение -1. А он все равно пишет: Дополнительные сведения: Входная строка имела неверный формат. Как только убираю минус. Все пашет. Вопрос почему если координаты верны. Вот делема=)) ( пс я вывожу в 0 столбец значения. чтоб удобнее было проверять) В numeric кол участников.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
 
int a = (int)numericUpDown1.Value;
            for (int i = 0; i < a; i++)//строка
            {
                int summ2 = 0;
                for (int j = 0; j < a; j++)//столбец
                {
                    int summ1 = 0;
                    summ1 = Convert.ToInt32(dataGridView1[(j * 2) + 3, i].Value);
                    summ2 = summ2 + summ1;
 
                }
                for (int j = 0; j < a; j++)
                {
                    if (j!=0)
                    {
                        int summ3 = 0;
                        summ3 = Convert.ToInt32(dataGridView1[(j*2)-1 , i].Value);
                        summ2 = summ2 + summ3;
                    }
 
                    
 
                }
                dataGridView1[0, i].Value = summ2;
Миниатюры
DataGridView казус с "-" (минусом)  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.05.2016, 20:09
Ответы с готовыми решениями:

Казус.
Что делаю: Есть отсортированный по конкретному признаку массив A (допустим, в нём 10000 элементов) из следующих записей: type...

казус с топологией
вот картинка. как разобраться с топологией, должно-же быть какое-то правило. то-есть: у первого варианта срезается 5 клеток и прибавляется...

Деление по модулю с минусом
Почему если 20 % 1.5 =0.5 , то -20 % 1.5 = 1.0 .Разве оно не должно быть = -0.5 Заранее простите за тупость)

6
 Аватар для ViterAlex
8952 / 4864 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
15.05.2016, 07:10
Цитата Сообщение от MAXONline Посмотреть сообщение
Не понимаю что с логикой
Неверный подход к решению задачи. Поясни всю задачу. Что с чем ты складываешь и на что делишь?
0
 Аватар для MAXONline
3 / 3 / 0
Регистрация: 15.12.2014
Сообщений: 77
15.05.2016, 08:28  [ТС]
Переписал с нуля код. И методом научного тыка нашел что ругается на координату 1,1. Создал новый проект попробовал на нулевой форме и таже ошибка. В проге я делаю круговую систему для соревнований (каждый с каждым ) и считаю кол-во очков Верхний треугольник считает верно. А нижний как только доходит до координаты 1,1 пишет:
Необработанное исключение типа "System.FormatException" в mscorlib.dll

Дополнительные сведения: Входная строка имела неверный формат.
Если меняю алгоритм в обход этой координаты. все ок считает. А если даже впрямую задаю действие с 1,1 то он орет.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
public void calculate()
        {
            int fsumm = 0;
            int coff = 0;
            int a = (int)numericUpDown1.Value;
            int b = a - 1;
            int c = a - 1;
            for (int strok = 0; strok < a; strok++)
            {
 
                for (int stolb = coff; stolb < b; stolb++)
                {
                    int summ1 = 0;
                    int summ2 = 0;
                    summ1 = Convert.ToInt32(dataGridView1[(stolb * 2) + 3, strok].Value);
                    summ2 = Convert.ToInt32(dataGridView1[(stolb * 2) + 4, strok].Value);
                    if (summ1 > summ2)
                    {
                        fsumm = fsumm + 1;
                    }
 
                }
                if (strok != 0)
                {
                    for (int stolb = coff; stolb < c; stolb++)
                    {
                        int summ1 = 0;
                        int summ2 = 0;
                        summ1 = Convert.ToInt32(dataGridView1[(stolb * 2) - 1, strok].Value);
                        summ2 = Convert.ToInt32(dataGridView1[(stolb * 2), strok].Value);
                        if (summ1 > summ2)
                        {
                            fsumm = fsumm + 1;
                        }
 
                    }
                }
                c--;
                coff++;
                dataGridView1[0, strok].Value = fsumm;
                fsumm = 0;
            }
        }
0
 Аватар для MAXONline
3 / 3 / 0
Регистрация: 15.12.2014
Сообщений: 77
15.05.2016, 08:43  [ТС]
Цитата Сообщение от ViterAlex Посмотреть сообщение
Что с чем ты складываешь и на что делишь?
Там есть поля 1,2,3,4... под ними 2 поля с очками. например 2 1. Если в первом поле очков больше чем во втором то + балл. Так всю строчку обходя закрашенные. Я решил считать по треугольникам. Тк во 2 треугольнике там с точностью все наоборот.
Миниатюры
DataGridView казус с "-" (минусом)  
0
 Аватар для ViterAlex
8952 / 4864 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
15.05.2016, 11:52
Не знаю есть ли необходимость пробегать по всей таблице, ведь можно вести подсчёт сразу после редактирования ячейки. Смотри пример.
А в цикле не нужно разбивать на треугольники. Нужно лишь пропускать ячейки, стоящие на диагонали. Индекс столбца j у таких ячеек может быть равен j = 2 * i + 1 или j = 2 * i + 2. Правда, если столбцы добавляются динамически, то могут быть варианты.
В приложенном проекте в dgv заранее добавлены 4 столбца: "Участники", "Сеты", "Очки" и "Места". Остальные столбцы, соответствующие учасникам, добавляются динамически. И в этом случае для вычисления индексов, которые нужно пропускать, следует брать свойство DisplayIndex вместо Index
Вложения
Тип файла: zip Tournament.zip (15.9 Кб, 2 просмотров)
1
 Аватар для MAXONline
3 / 3 / 0
Регистрация: 15.12.2014
Сообщений: 77
15.05.2016, 13:52  [ТС]
Цитата Сообщение от ViterAlex Посмотреть сообщение
Смотри пример.
Такой метод не подойдет так как судя по коду он делает пересчет делает каждый раз, когда я изменю значение. И при исправлении написанного он выдаст или заберет ненужный балл.
Так что тут нужно делать общий пересчет. Всего сразу.
И спасибо ты меня натолкнул на идею. При изменении значения делать пересчет всей строки. Это позволит избавиться от таких ошибок.

Добавлено через 5 минут
Но все таки интересно почему ругается на ячейку 1.1
Я создаю документ новый там dgv и 2 кнопки и numeric. Заливаю Алгоритм создания таблицы.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
DoubleBuffered = true;
            label6.Visible = true;
            numericUpDown1.Visible = true;
            dataGridView1.Columns.Clear();
            dataGridView1.Rows.Clear();
            dataGridView1.Columns.Add("0", "Участники");
            int a = (int)numericUpDown1.Value;
            string[] p = { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32" };
            for (int i = 0; i < a; i++)
            {
 
                dataGridView1.Columns.Add("1", p[i]);
                dataGridView1.Columns.Add("1", "");
                dataGridView1.Rows.Add("", "");
                dataGridView1.Rows[i].HeaderCell.Value = p[i];
                dataGridView1.Columns[i].Width = (30);
                dataGridView1.Columns[i * 2].Width = (30);
                dataGridView1.Columns[i * 2 + 1].Width = (30);
                dataGridView1.Rows[i].Cells[(i + 1) * 2].Style.BackColor = System.Drawing.Color.Black;
                dataGridView1.Rows[i].Cells[(i * 2) + 1].Style.BackColor = System.Drawing.Color.Black;
                dataGridView1.Width = (449 + 60 * (i+1));
                dataGridView1.Height = (60+(22*i));
                dataGridView1.RowHeadersWidth = (60);
                int rez= SystemInformation.PrimaryMonitorSize.Width;
                int rez1 = SystemInformation.PrimaryMonitorSize.Height;
                if (dataGridView1.Height>rez1*80/100)
                {
                    dataGridView1.Height = rez1 * 80 / 100;
                    
                }
                if (dataGridView1.Width > rez * 80 / 100)
                {
                    dataGridView1.Width = rez * 80 / 100;
                }
 
            }
            dataGridView1.Columns[(a * 2)].Width = (30);
            dataGridView1.Columns.Add("0", "Cеты");
            dataGridView1.Columns.Add("0", "Очки");
            dataGridView1.Columns.Add("0", "Места");
            dataGridView1.Columns[(a*2)+1].Width = (60);
            dataGridView1.Columns[(a * 2) + 2].Width = (60);
            dataGridView1.Columns[(a * 2) + 3].Width = (60);
 
            dataGridView1.Columns[0].Width = (200);
и расчет. И просто вместо координаты поставил summ1 = Convert.ToInt32(dataGridView1[1, 1].Value); . Один один. И он ругается. Мне дико интересно почему такая штука выходит.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
int fsumm = 0;
            int coff = 0;
            int a = (int)numericUpDown1.Value;
            int b = a - 1;
            int c = a - 1;
            for (int strok = 0; strok < a; strok++)
            {
                
                    for (int stolb = coff; stolb < b; stolb++)
                    {
                    int summ1 = 0;
                    int summ2 = 0;
                    summ1 = Convert.ToInt32(dataGridView1[(stolb*2)+3, strok].Value);
                    summ2= Convert.ToInt32(dataGridView1[(stolb * 2) + 4, strok].Value);
                    if (summ1>summ2)
                    {
                        fsumm = fsumm + 1;
                    }
                    
                    }
                if (strok!=0)
                {
                    for (int stolb = coff; stolb < c; stolb++)
                    {
                        int summ1 = 0;
                        int summ2 = 0;
                        int cord = (stolb * 2) - 1;
                        summ1 = Convert.ToInt32(dataGridView1[1, 1].Value);
                        summ2 = Convert.ToInt32(dataGridView1[(stolb * 2), strok].Value);
                        if (summ1 == summ2)
                        {
                            fsumm = fsumm + 1;
                        }
 
                    }
                }
                c--;
                coff++;
                dataGridView1[0, strok].Value = fsumm;
                fsumm = 0;
            }
0
 Аватар для MAXONline
3 / 3 / 0
Регистрация: 15.12.2014
Сообщений: 77
16.05.2016, 17:58  [ТС]
Сделал проще. Столбец в котором выдавал ошибку просто не использовал сдвинул все на 1. Закрашенные элементы сделал readonly. а всю таблицу прогнал через обычный цикл.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int summ = 0;
            int a = (int)numericUpDown1.Value;
            for (int strok = 0; strok < a; strok++)
            {
                for (int stolb = 0; stolb < a; stolb++)
                {
                    int summ1 = 0;
                    int summ2 = 0;
                    summ1 = Convert.ToInt32(dataGridView1[(stolb * 2) +2, strok].Value);
                    summ2 = Convert.ToInt32(dataGridView1[(stolb * 2) + 3, strok].Value);
                    if (summ1>summ2)
                    {
                        summ = summ + 1;
                    }
                    dataGridView1[a*2+3, strok].Value = summ;
                    
                }
                summ = 0;
            }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.05.2016, 17:58
Помогаю со студенческими работами здесь

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

Сделайте вычитание с минусом
program SumN; {$APPTYPE CONSOLE} uses SysUtils; label cycl, end_p; Const N:byte=10; Type TNumber=array of byte;

Казус с воспроизведением видео
Всем даров, у меня срочная проблема с воспроизведение видео int width = 600; int height = 700; ...

Казус при установке
Устанавливаю хрюшу на нетбук. Однако изначально не зашил в устанавливаемые файлы драйвер SATA, и теперь, распаковавшись, установщик XP не...

Казус с оперативной памятью
Помогите пожалуйста. Моя материнка MSI H67MA-E45/B3 (MS-7678). У меня есть Kingston DDR3-1600 16384MB PC3-12800 (Kit of 4x4096) HyperX...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
Программный отбор значений справочника
Maks 21.03.2026
Установка программного отбора значений справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит предопределенное значение перечислений. Процедура. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru