Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/25: Рейтинг темы: голосов - 25, средняя оценка - 4.60
-28 / 6 / 1
Регистрация: 13.12.2015
Сообщений: 398
1

Нарисовать Chart по данным datagriedview

12.07.2018, 10:38. Показов 4992. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день, всем.
Подскажите пожалуйста в чем ошибка:
В datagriedview выводится три столбца: Столбец0, Столбец1, Столбец2
SQL
1
2
3
4
5
6
7
8
9
10
Столбец0 Столбец  Столбец2
20180101    Номер1 2
20180101    Номер2 21
20180101    Номер3 21
20180201    Номер1 54
20180201    Номер2 5
20180201    Номер3 21
20180301    Номер1 45
20180301    Номер2 54
20180301    Номер3 45
По данным из таблицы нужно сделать график (во вложении).
Строю Chart, но он пустой. Хотя datagriedview данные меняются.
C#
1
2
3
4
5
6
7
8
////--////
  SqlDataAdapter da = new SqlDataAdapter(comm);
  DataSet ds = new DataSet();
  da.Fill(ds);
  dataGridView2.DataSource = ds.Tables[0];
  chart1.Series["Series1"].XValueMember = (ds.Tables[0].Columns[0]).ToString();
  chart1.Series["Series1"].YValueMembers = (ds.Tables[0].Columns[1]).ToString();
  chart1.DataBind();
Миниатюры
Нарисовать Chart по данным datagriedview  
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.07.2018, 10:38
Ответы с готовыми решениями:

Нарисовать график в Chart по данным из Stringgrid
подскажите ,пожалуйста, как можно сделать график из таблицы стрингрида (чтобы по оси x были...

График chart по данным excel
Как связать chart и excel в с# чтобы по выбору столбцов строился график? берется максимальное...

Рисование графика в Chart по данным из DataGridView
Перелазил весь инет но так и не нашёл ответа. Есть datagridview и chart. Пользователь вводит данные...

Chart построение диаграммы по данным из 3 TEdit
Имеется 3 Edit'а. На основании введенных в них данных диаграмма должна принять свои пропорции из...

10
8940 / 4852 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
12.07.2018, 11:22 2
C#
1
2
chart1.Series["Series1"].XValueMember = ds.Tables[0].Columns[0].ColumnName;
chart1.Series["Series1"].YValueMembers = ds.Tables[0].Columns[1].ColumnName;
1
557 / 534 / 225
Регистрация: 02.11.2016
Сообщений: 1,538
12.07.2018, 11:22 3
studentrm, как сделать c DataSource не подскажу, но можно так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
chart1.Series[0].Name = "20180101";
var rows = dt.Rows.Cast<DataRow>().Where(r => (int)r[0] == 20180101);
foreach (DataRow row in rows)
{
    chart1.Series[0].Points.AddXY(row[1], row[2]);
}
 
chart1.Series.Add("20180201");
rows = dt.Rows.Cast<DataRow>().Where(r => (int)r[0] == 20180201);
foreach (DataRow row in rows)
{
    chart1.Series[1].Points.AddXY(row[1], row[2]);
}
 
chart1.Series.Add("20180301");
rows = dt.Rows.Cast<DataRow>().Where(r => (int)r[0] == 20180201);
foreach (DataRow row in rows)
{
    chart1.Series[2].Points.AddXY(row[1], row[2]);
}
Результат:
Нарисовать Chart по данным datagriedview
1
-28 / 6 / 1
Регистрация: 13.12.2015
Сообщений: 398
12.07.2018, 11:24  [ТС] 4
Shogun31337, а если datagriedview будет содержать не три дата, а несколько.
т.е. динамически может изменяться
(int)r[0] == 20180101
0
557 / 534 / 225
Регистрация: 02.11.2016
Сообщений: 1,538
12.07.2018, 12:18 5
Лучший ответ Сообщение было отмечено studentrm как решение

Решение

Цитата Сообщение от studentrm Посмотреть сообщение
т.е. динамически может изменяться
Ну с такой структурой таблицы нужно использовать функцию группировки по первому столбцу, чтобы узнать сколько всего значений и какие они. А потом уже использовать полученный массив.

Добавлено через 22 минуты
Примерно так будет, если количество неизвестно:
C#
1
2
3
4
5
6
7
8
9
10
11
            var series = dt.Rows.Cast<DataRow>().GroupBy(r => r[0]).Select(g => g.Key).ToArray();
 
            foreach(var s in series)
            {
                chart1.Series.Add(s.ToString());
                var rows = dt.Rows.Cast<DataRow>().Where(r => (int)r[0] == (int)s);
                foreach (DataRow row in rows)
                {
                    chart1.Series[s.ToString()].Points.AddXY(row[1], row[2]);
                }
            }
Добавлено через 23 минуты
PS. Можно еще проще сделать. Все, оказывается, делается в одну строку:
C#
1
chart1.DataBindCrossTable(dt.Rows, ds.Tables[0].Columns[0].ColumnName, ds.Tables[0].Columns[1].ColumnName, ds.Tables[0].Columns[2].ColumnName, "");
Добавлено через 1 минуту
Data Binding Microsoft Chart Control
0
-28 / 6 / 1
Регистрация: 13.12.2015
Сообщений: 398
12.07.2018, 14:50  [ТС] 6
Shogun31337, dt.Rows - dt источник подключения? Ошибка string

Добавлено через 5 минут
Shogun31337, datagriedview ошибка int
0
557 / 534 / 225
Регистрация: 02.11.2016
Сообщений: 1,538
12.07.2018, 14:56 7
Цитата Сообщение от studentrm Посмотреть сообщение
dt источник подключения?
Да. В Вашем случае будет ds.Tables[0].Rows. Забыл исправить...

Цитата Сообщение от studentrm Посмотреть сообщение
datagriedview ошибка int
очень исчерпывающая информация... где ошибка? когда возникает? что при этом написано?
0
-28 / 6 / 1
Регистрация: 13.12.2015
Сообщений: 398
12.07.2018, 15:00  [ТС] 8
Shogun31337,
ошибка на данной строке
C#
1
chart1.DataBindCrossTable(dataGridView1.Rows, ds.Tables[0].Columns[0].ColumnName, ds.Tables[0].Columns[1].ColumnName, ds.Tables[0].Columns[2].ColumnName, "");
Ошибка появляется, после того как datagriedview наполнен и след этап постройка диаграммы
C#
1
2
3
4
5
An unhandled exception of type 'System.ArgumentException' occurred in System.Windows.Forms.DataVisualization.dll
 
 
 
Additional information: Точки данных ряда не поддерживают значения типа System.Windows.Forms.DataGridViewRow, допускается использование значений только следующих типов: Double, Decimal,
0
557 / 534 / 225
Регистрация: 02.11.2016
Сообщений: 1,538
12.07.2018, 15:02 9
Цитата Сообщение от studentrm Посмотреть сообщение
ошибка на данной строке
Я же сказал выше:
Цитата Сообщение от Shogun31337 Посмотреть сообщение
В Вашем случае будет ds.Tables[0].Rows.
При чем тут dataGridView1?
1
-28 / 6 / 1
Регистрация: 13.12.2015
Сообщений: 398
12.07.2018, 15:03  [ТС] 10
Shogun31337, спасибо большое
0
557 / 534 / 225
Регистрация: 02.11.2016
Сообщений: 1,538
12.07.2018, 15:05 11
studentrm, на здоровье!
0
12.07.2018, 15:05
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.07.2018, 15:05
Помогаю со студенческими работами здесь

Chart: построение графиков по данным из таблиц
Все доброго времени суток. Ситуация такая: В таблице имеются данные по продажам, необходимо их...

Вывод графика в Chart по данным из таблицы БД
Здравствуйте!!! Столкнулся с проблемой вывода графика по таблице(VB 2012). Выдает ошибку:...

Построение графика в Chart по данным RichEdit
Добрый день. много тем про ричэдит, пожалуй и я спрошу. есть файл с данными типа ...

Как сформировать диаграмму(Chart) по выбранным данным из DataGrid ?
Всем привет! Ребят очень нужна помощь! Как сформировать диаграмму(Chart) по выбранным данным...


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

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