1 / 1 / 0
Регистрация: 24.09.2012
Сообщений: 44
1

Производить вычисления в ячейках DGV по мере ввода данных

25.10.2012, 07:21. Показов 2303. Ответов 27
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Прошу помочь - я создаю dataGridView, автоматом заполняю два первых столбца, в третий пользователь должен ввести значения, а в четвертом результаты вычислений, как сделать автоматическое обновление в dgv чтобы пользователь только ввел значения в третьем столбце и сразу же появились результаты в четвертом?

Плюс, у меня есть comboBox в зависимости от выбранного индекса в котором будут разные значения, так же обновлять надо автоматом.

Вот такой код:
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
        private void grid()
        {
 
            dataGridView1.Rows.Clear();
 
            this.dataGridView1.AllowUserToResizeRows = false;
            this.dataGridView1.MultiSelect = false;
            dataGridView1.AllowUserToAddRows = false;
 
            if (comboBox1.SelectedIndex > 1)
            {
                this.dataGridView1.Rows.Add("21,29", "32,56");
            }
 
            else
            {
                this.dataGridView1.Rows.Add("1018,87", "1557,67");
            }
 
            this.dataGridView1.Rows.Add("55,40", "81,88");
            this.dataGridView1.Rows.Add("0", "0");
            this.dataGridView1.Rows.Add("11,28", "14,43");
            this.dataGridView1.Rows.Add("9,93", "12,57");
            this.dataGridView1.Rows.Add("9,93", "12,57");
            this.dataGridView1.Rows.Add("9,93", "12,57");
            this.dataGridView1.Rows.Add("2,28", "2,65");
            this.dataGridView1.Rows.Add("2,40", "0");
            this.dataGridView1.Rows.Add("1,3", "0");
            this.dataGridView1.Rows.Add("2,28", "2,65");
            this.dataGridView1.Rows.Add("48,35", "62,15");
        }
 
 
        private void math()
        {
            int i = 0;
            while (i < 12)
            {
            string heating_2010_string = dataGridView1.Rows[i].Cells[0].Value.ToString();
            double heating_2010 = Convert.ToDouble(heating_2010_string);
 
            string heating_2012_string = dataGridView1.Rows[i].Cells[1].Value.ToString();
            double heating_2012 = Convert.ToDouble(heating_2012_string);
 
            double sum_heating = ((heating_2012) - ((heating_2010) * 115 / 100));
            sum_heating = Math.Round(sum_heating, 2);
            dataGridView1.Rows[i].Cells[3].Value = Convert.ToString(sum_heating);
            i++;
            }
        }
 
        private void calculations_Load(object sender, EventArgs e)
        {
            ControlBox = false;
            comboBox1.SelectedIndex = 6;
            comboBox2.SelectedIndex = 0;
 
            grid();
            grid_header();
            math();
 
        }
Значения из третьего столбца я пока не брал, т.к. нет обновления таблицы
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.10.2012, 07:21
Ответы с готовыми решениями:

Поиск в DGV по мере ввода
Всем привет, подскажите как сделать поиск что бы по мере вода имени в textbox выбиралась строка в...

Вывод данных (сортировка) по мере ввода поисковых значений
Добрый день уважаемые форумчане! Прошу вашего совета для решения проблемы следующего характера:...

Изменение данных в ячейках в зависимости от ввода в диалоговом окне
Добрый день, Имеется файл, в котором часть ячеек неизменны, а часть нужно изменять в зависимости...

Выравнивание текста в ячейках DGV
Просто выводи почему - то зеркально :(=-O

27
6048 / 3457 / 335
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
29.10.2012, 09:51 21
Author24 — интернет-сервис помощи студентам
na1anya, для получения суммы напиши метод, который будет циклом проходить по всем ячейкам 3-го столбца и суммировать их
0
1 / 1 / 0
Регистрация: 24.09.2012
Сообщений: 44
29.10.2012, 13:30  [ТС] 22
nio, Я так и сделал:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
        private void math()
        {
            int i = 0;
            double sumi = 0;
            while (i < 12)
            {
                string sumi_string = dataGridView1.Rows[i].Cells[3].Value.ToString();
                double sumi_double = Convert.ToDouble(sumi_string);
                sumi = sumi + sumi_double;
                i++;
            }
            sumi = Math.Round(sumi, 2);
            textBox1.AppendText(Convert.ToString(sumi));
        }
вроде правильно, но где его применить?
0
6048 / 3457 / 335
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
29.10.2012, 13:46 23
Цитата Сообщение от na1anya Посмотреть сообщение
но где его применить?
в событии изменения значения ячейки

Добавлено через 5 минут
na1anya, в твоем коде много ненужного, переписал немного:
C#
1
2
3
4
5
6
7
8
9
        private void math()
        {
            double sumi = 0;
            foreach(DataGridViewRow r in dataGridView1.Rows)            
                  sumi += Convert.ToDouble(r.Cells[3].Value);           
          
            sumi = Math.Round(sumi, 2);
            textBox1.Text = sumi.ToString();
        }
1
1 / 1 / 0
Регистрация: 24.09.2012
Сообщений: 44
29.10.2012, 13:48  [ТС] 24
Цитата Сообщение от nio Посмотреть сообщение
в событии изменения значения ячейки
C#
1
string sumi_string = dataGridView1.Rows[i].Cells[3].Value.ToString();
"Ссылка на объект не указывает на экземпляр объекта", хотя вижуал студиа в переменной summi_string показывает правильное значение

Добавлено через 1 минуту
Цитата Сообщение от nio Посмотреть сообщение
в твоем коде много ненужного, переписал немного:
теперь заработало!
0
6048 / 3457 / 335
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
29.10.2012, 13:52 25
na1anya, ты какую-то фигню делаешь, покажи код всего обработчика события

Добавлено через 1 минуту
... или уже неактуально?
0
1 / 1 / 0
Регистрация: 24.09.2012
Сообщений: 44
29.10.2012, 13:54  [ТС] 26
nio, после того как ты подкорректировал, все стало отлично! спасибо!
0
1 / 1 / 0
Регистрация: 24.09.2012
Сообщений: 44
30.10.2012, 08:44  [ТС] 27
nio, CellValueChanged срабатывает только на изменение в dgv, а если мне нужно в одну ячейку(которая тоже участвует в вычислении) вставить значение из базы? каким образом добавить это в обработчик?
Миниатюры
Производить вычисления в ячейках DGV по мере ввода данных  
0
608 / 583 / 157
Регистрация: 29.06.2010
Сообщений: 1,620
30.10.2012, 09:32 28
Цитата Сообщение от na1anya Посмотреть сообщение
а если мне нужно в одну ячейку(которая тоже участвует в вычислении) вставить значение из базы?
название метода Cell_Value_Changed == "Ячейки_Значение_Изменилось". лично я не совсем понял суть вопроса, т.к. это событие идеально подходит для рассматриваемой ситуации..
0
30.10.2012, 09:32
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.10.2012, 09:32
Помогаю со студенческими работами здесь

Как работать с CheckBox в ячейках DGV
Хочу сделать что бы при нажатия чекбокса в гриде, менялся цвет ячейки. Все значения (true, false)...

Суммирование значений в ячейках двух полей DGV
Помогите сделать так что бы когда жму на кнопку то из поля Остаток прибавляло число к полю...

Ссылки в ячейках DGV с переходом на форму с данными выбранной строки
Здравствуйте, такая задача есть таблица1 с полями (Фирма, адрес, телефон и т.д) при нажатие на...

Перенос данных из одного DGV в другой DGV
Нужно перенести данные из одного dgv в другой(в идеале ещё прибавить к столбцам выбранные значения...


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

Или воспользуйтесь поиском по форуму:
28
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru