Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
0 / 0 / 0
Регистрация: 10.09.2016
Сообщений: 39

Найти сумму строк в DataGridView ,применяя LINQ

25.04.2017, 17:05. Показов 1654. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Нужна помощь по DGV в форме и LINQ. Есть база данных, в которой одна таблица.Подключаю ее с помощью Object Relation Designer ,в результате чего имею одну строку для подключения бд : public static linqWorkDataContext db = new linqWorkDataContext(); Есть форма с DataGridView ,где отображаются эти данные( привожу скрин).

Мне нужно ,чтобы пользователь с помощью checkbox выбирал желаемые колонки и по ним выводились итоговые данные - выбранное поле,количество и сумма. Например: пользователь выбрал колонки Город и Менеджер . Выводится Город,Менеджер,Количество(итоговое) и Сумма(тоже итоговая). Должна быть одна итоговая строка( это понятно ,как сделать, с помощью Distinct).На скрине2 показан случай,если пользователь выбрал Дату и Организацию.

Так же нужно , чтобы выводились только выбранные колонки, а остальные удалялись(пользователь должен видеть только то,что выбрал).(как-то нужно перезаписывать DGV, что ли)

Пыталась решить так : Все, что закомменчено,пробовала или там есть ошибки. При запросе в первом варианте количество не считает совсем, а в сумме выводится 2600( не представляю, почему так)
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
 Table<Registr> reg = db.GetTable<Registr>();
            if (checkBox1.Checked)
            {
                var sumEl = (from s in db.GetTable<Registr>() select s.quantity);
                int sum = 0;
                foreach (var item in sumEl) { sum = Convert.ToInt32(sum + item); }
                // int sum = sumEl.Sum(n => n.quantity);    
                var amountEl = (from a in db.GetTable<Registr>() select a.amount);
                decimal amount = 0;
                foreach (var i in amountEl) amount = Convert.ToInt32(amount + i);
                var v = (from r in db.GetTable<Registr>() select new { r.date, sum, amount }).Distinct();
                registrDataGridView.DataSource = v;
            }
 
if (checkBox2.Checked)
            {
                // int sum = registrDataGridView.Rows.Cast<DataGridViewRow>().Sum(t => Convert.ToInt32(t.Cells[1].Value));
               // int sum = Convert.ToInt32(db.GetTable<Registr>("SUM(quantity)", String.Empty));
                int sum1 = reg.AsEnumerable().Sum(r=> (int)r.quantity);
                decimal amount = reg.AsEnumerable().Sum(r => (decimal)r.amount);
                //var sumEl = (from s in db.GetTable<Registr>() select s.quantity);
                //int sum = 0;
                //foreach (var item in sumEl) { sum = Convert.ToInt32(sum + item); }
                //int sum = sumEl.Sum(n => n.quantity);    
                //var amountEl = (from a in db.GetTable<Registr>() select a.amount);
                //decimal amount = 0;
                //foreach (var i in amountEl) amount = Convert.ToInt32(amount + i);
                //int sEl = db.GetTable<Registr>().Sum(n => n.quantity);
                var v = (from r in db.GetTable<Registr>() select new { r.company,sum1 , amount }).Distinct();
                registrDataGridView.DataSource = v;
            }
            if (checkBox3.Checked)
            {
                var v = (from r in db.GetTable<Registr>() select  new {r.city, r.quantity,r.amount }).Distinct();
                registrDataGridView.DataSource = v;
            }
            if (checkBox4.Checked)
            {
                var v =( from r in db.GetTable<Registr>() select new { r.country, r.quantity,r.amount }).Distinct();
                registrDataGridView.DataSource = v;
            }
            if (checkBox5.Checked)
            {
                var v =( from r in db.GetTable<Registr>() select new { r.manager, r.quantity,r.amount }).Distinct();
                registrDataGridView.DataSource = v;
            }
Миниатюры
Найти сумму строк в DataGridView ,применяя  LINQ   Найти сумму строк в DataGridView ,применяя  LINQ  
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.04.2017, 17:05
Ответы с готовыми решениями:

Не применяя программирование, найти сумму элементов массива, расположенных между первым и вторым положительным
Не применяя программирование, найти сумму элементов массива, расположенных между первым и вторым положительным элементами ...

Найти сумму элементов строк матрицы [A], размером NxM. Вывести на печать исходную матрицу и сумму строк.
Найти сумму элементов строк матрицы , размером NxM. Вывести на печать исходную матрицу и сумму строк.

Дано натуральное число. Найти сумму последних "n" цифр "n" числа, не применяя переменых значений
Здравствуйте, помогите написать две программы. 1) Дано натуральное число. Найти сумму последних &quot;n&quot; цифр &quot;n&quot; числа,...

8
785 / 616 / 273
Регистрация: 04.08.2015
Сообщений: 1,713
25.04.2017, 19:30
qrbio, на SQL ваш запрос с датой и организацией будет выглядеть так:
SQL
1
2
SELECT [DATE],company, SUM(quantity) AS quantity, SUM(amount) AS amount FROM Registr
GROUP BY [DATE],company
Т.е. у вас будет постоянная часть запроса и изменяющаяся в зависимости от выбранных чекбоксов. И формироваться запрос будет так:
C#
1
2
//в переменной fields выбранные столбцы через зпт. 
string query="select "+ fields +",sum(quantity) as quantity, sum(amount) as amount from Registr group by "+fields
0
0 / 0 / 0
Регистрация: 10.09.2016
Сообщений: 39
25.04.2017, 19:49  [ТС]
Пожалуйста,объясните подробнее ,что вы имеете ввиду под этой строкой:

//в переменной fields выбранные столбцы через зпт.
string query="select "+ fields +",sum(quantity) as quantity, sum(amount) as amount from Registr group by "+fields

запрос через строку? Это запрос sql или linq?

Добавлено через 3 минуты
Надеюсь, вы подскажете,ибо я уже просто в отчаянии.
0
785 / 616 / 273
Регистрация: 04.08.2015
Сообщений: 1,713
25.04.2017, 22:47
Цитата Сообщение от qrbio Посмотреть сообщение
Это запрос sql или linq?
SQL. Вы не сможете сделать linq-запрос, т.к. у вас набор столбцов может меняться.
0
0 / 0 / 0
Регистрация: 10.09.2016
Сообщений: 39
25.04.2017, 23:03  [ТС]
То есть, нужно строить примерно как здесь? https://metanit.com/sharp/adonet/3.6.php
0
785 / 616 / 273
Регистрация: 04.08.2015
Сообщений: 1,713
25.04.2017, 23:16
Цитата Сообщение от qrbio Посмотреть сообщение
То есть, нужно строить примерно как здесь?
Можно и так.
0
0 / 0 / 0
Регистрация: 10.09.2016
Сообщений: 39
25.04.2017, 23:20  [ТС]
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
namespace Sharp_test
{
 
 
    public partial class Form1 : Form
    {// public static CompanyDBDataContext db = new CompanyDBDataContext();
     // Table<Registr> reg = db.GetTable<Registr>();
 
        DataTable dt = new DataTable();
        [Table(Name = "Registr")]
        public class Registr
        {
            [Column(IsPrimaryKey = true, IsDbGenerated = true)]
            public DateTime date { get; set; }
            [Column]
            public string company { get; set; }
            [Column]
            public string city { get; set; }
            [Column]
            public string country { get; set; }
            [Column]
            public string manager { get; set; }
            [Column]
            public int quantity { get; set; }
            [Column]
            public decimal amount { get; set; }
        }
        public Form1()
        {
            InitializeComponent();
            string connectionString = @"Data Source=SHMONIA-ПК\SQLEXPRESS;Initial Catalog=CompanyDB;Integrated Security=True";
            string sql = "SELECT * FROM Registr";      
       using (SqlConnection connection = new SqlConnection(connectionString)){
                SqlDataAdapter adapter = new SqlDataAdapter(sql, connection);
                DataSet ds = new DataSet("Registr"); 
                adapter.Fill(ds, "[Registr]");
                dataGridView1.DataSource = ds.Tables[0];
                SqlCommandBuilder commandBuilder = new SqlCommandBuilder(adapter);
                //adapter.Update(ds); обновилось
                //ds.Clear();очищаем
                //adapter.Fill(ds); загружаем заново
 
            }
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            // TODO: This line of code loads data into the 'companyDBDataSet.Registr' table. You can move, or remove it, as needed.
            this.registrTableAdapter.Fill(this.companyDBDataSet.Registr);
        }
 
        private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
 
        }
        private void button1_Click(object sender, EventArgs e)
        {if (checkBox1.Checked) {
                string sql1 = "SELECT [DATE], SUM(quantity) AS quantity, SUM(amount) AS amount FROM RegistrGROUP BY[DATE], company";
                dataGridView1.DataSource = sql1;
            }}
Таким образом ничего не выводит - таблица совсем пустая.
Корректен ли этот запрос и правильно ли я вывожу данные?
0
785 / 616 / 273
Регистрация: 04.08.2015
Сообщений: 1,713
25.04.2017, 23:43
Цитата Сообщение от qrbio Посмотреть сообщение
Корректен ли этот запрос и правильно ли я вывожу данные?
Нет 2 раза. В запросе ошибка, пропущен пробел
Цитата Сообщение от qrbio Посмотреть сообщение
RegistrGROUP
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
string fields="";
if(checkBox1.Checked)
fields+="date,";
if(checkBox2.Checked)
fields+="company,";
//...Все остальные
//когда строка сформирована,удалить последнюю зпт.
string query="select "+ fields +",sum(quantity) as quantity, sum(amount) as amount from Registr "+
"group by "+fields
 
using (SqlConnection connection = new SqlConnection(connectionString)){
                SqlDataAdapter adapter = new SqlDataAdapter(query, connection);
                DataSet ds = new DataSet("Registr"); 
                adapter.Fill(ds, "[Registr]");
                dataGridView1.DataSource = ds.Tables[0];
}
0
0 / 0 / 0
Регистрация: 10.09.2016
Сообщений: 39
26.04.2017, 07:40  [ТС]
Из-за чего может быть такая ошибка?
Миниатюры
Найти сумму строк в DataGridView ,применяя  LINQ  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.04.2017, 07:40
Помогаю со студенческими работами здесь

В матрице найти сумму четных строк и произведение нечетных строк
Д(10,15) матрице найти сумму четных строк и умножение не четных строк. Через найденных сумму и умножение составить массив х(х1...х10).

Найти сумму всех чётных строк матрицы и отсортировать элементы нечётных строк по возрастанию
1.Задана матрица целых чисел.Найти сумму всех четных строк матрицы и отсортировать элементы не четных строк по возрастанию.

Найти в двумерном динамическом массиве сумму строк и сумму столбцов и сравнить их
Доброго времени суток! Не могу понять это задание: дана матрица (N+15)x(N+15), если сумма всех чисел в строках больше суммы всех чисел в...

Linq поиск по datagridview
Добрый день Для поиска Linq использую код dataGridView1.Rows.Cast&lt;DataGridViewRow&gt;() .Where(x =&gt; (int)x.Cells.Value ==...

Linq и редактировать dataGridView
Я подключил Linq до dataGridView, но редактировать не магу dataGridView. Что делать?


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru