Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: Базы данных, ADO.NET
Войти
Регистрация
Восстановить пароль
 
kuzya987
2 / 2 / 0
Регистрация: 05.09.2010
Сообщений: 32
1

Добавление произвольного количества столбцов из DB MSSQL 2008

03.10.2014, 14:55. Просмотров 497. Ответов 8
Метки нет (Все метки)

Товарищи, Привет!

Столкнулся с проблемкой в добавлении столбцов в DataGridView. Суть вопроса: Есть некоторый SQL запрос, который возвращает некоторое количество строк, это может быть 1, 2, 3 .... n строк, и мне нужно, чтобы в итоге эти строки стали столбцами в DataGridView.

Вот пример таблицы, которую я получаю из БД:

PERIODP_VOLA_VOL
001.201410.0009.980
002.201420.00021.600
003.201430.00028.900
004.201440.00041.520
005.201450.00045.982
006.201460.00055.600
007.201470.00060.900
008.201480.00076.300
009.201490.0000.000
010.2014110.1000.000
011.2014100.2000.000
012.2014120.3000.000

Первый столбец в этой таблице, содержит заголовки столбцов для DataGrid.

P.S. Искал решение на форуме, но так ничего и не нашел, если плохо смотрел, ткните пожалуйста носом. Не нужно указывать ссылки на темы где люди не знают как добавить столбец в ДатаГрид (это я умею). Мне нужно понять как добавить столбцы, если их количество заведомо неизвестно.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.10.2014, 14:55
Ответы с готовыми решениями:

Переход с mssql Express 2008 R2 на mssql 2012
Уважаемые Гуру! Темы о mssql 2008 попадаются значительно чаще , чем о mssql...

Заполнение ListView из БД MSSQL 2008
Ребята помогите! Пытаюсь заполнить в Visual Studio 2010 (C#), ListView...

Создание резервной копии бд. mssql server 2008
Приветствую. Подскажите, можно ли как-нибудь сделать чтобы программа создавала...

Добавление строки в БД MSSql
возможно пишу не так запрос, но подобная конструкция работала в С++. В...

Как считать название столбцов в таблице БД MSSQL
Нужно считать название столбцов из таблицы в БД (MSSQL) ,например в список,...

8
nedel
618 / 607 / 358
Регистрация: 09.04.2014
Сообщений: 1,442
Завершенные тесты: 1
03.10.2014, 16:09 2
Цитата Сообщение от kuzya987 Посмотреть сообщение
как добавить столбцы, если их количество заведомо неизвестно.
после того как вы получите данные из БД количество становится известным, тогда и добавляйте
Цитата Сообщение от kuzya987 Посмотреть сообщение
добавить столбец в ДатаГрид (это я умею)
Добавлено через 2 минуты
а можно и так
Displaying Vertical Rows in DataGrid View
0
kuzya987
2 / 2 / 0
Регистрация: 05.09.2010
Сообщений: 32
09.10.2014, 10:47  [ТС] 3
Цитата Сообщение от nedel Посмотреть сообщение
после того как вы получите данные из БД количество становится известным, тогда и добавляйте
Это да, но вопрос в том, что это количество может быть разным.

Цитата Сообщение от nedel Посмотреть сообщение
а можно и так
Displaying Vertical Rows in DataGrid View
Это как раз то что мне нужно, не понятно только как заголовки столбцов добавить...
0
nedel
618 / 607 / 358
Регистрация: 09.04.2014
Сообщений: 1,442
Завершенные тесты: 1
09.10.2014, 11:29 4
Цитата Сообщение от kuzya987 Посмотреть сообщение
не понятно только как заголовки столбцов добавить...
в public DataSet FlipDataSet(DataSet my_DataSet)
C#
1
2
 for (int i = 0; i <= dt.Rows.Count; i++)
   {   table.Columns.Add(Convert.ToString(i));  }
вместо Convert.ToString(i) вставляйте свои названия dt.Rows[i][0].ToString()

Добавлено через 5 минут
Цитата Сообщение от kuzya987 Посмотреть сообщение
Это да, но вопрос в том, что это количество может быть разным.
и что мешает каждый раз удалять все предыдущие и добавлять новые вне зависимости от их количества?
0
kuzya987
2 / 2 / 0
Регистрация: 05.09.2010
Сообщений: 32
09.10.2014, 12:41  [ТС] 5
Цитата Сообщение от nedel Посмотреть сообщение
вместо Convert.ToString(i) вставляйте свои названия
Названия есть, в исходной таблице из БД, в ячейках колонки PERIOD, т.е. '001.2014', '002.2014' и т.д.

Я думал также циклом загнать и вместо Convert.ToString(i) написал dt.Rows[i][0].ToString(); со смещением на единицу, но ругается, пишет что столбец с таким именем уже есть.

Добавлено через 1 час 9 минут
Цитата Сообщение от nedel Посмотреть сообщение
и что мешает каждый раз удалять все предыдущие и добавлять новые вне зависимости от их количества?
Чёт не совсем понимаю, можешь пример написать?
0
nedel
618 / 607 / 358
Регистрация: 09.04.2014
Сообщений: 1,442
Завершенные тесты: 1
09.10.2014, 14:19 6
Цитата Сообщение от kuzya987 Посмотреть сообщение
Чёт не совсем понимаю
1. делаешь выборку - получаешь таблицу
2. удаляеш все столбцы в DataGridView
3. добавляешь в DataGridView столько столбцов сколько строк в таблице

Добавлено через 3 минуты
Цитата Сообщение от kuzya987 Посмотреть сообщение
пишет что столбец с таким именем уже есть.
ну да, столбцы в DataTable должны иметь уникальное имя
0
kuzya987
2 / 2 / 0
Регистрация: 05.09.2010
Сообщений: 32
09.10.2014, 14:27  [ТС] 7
Цитата Сообщение от nedel Посмотреть сообщение
1. делаешь выборку - получаешь таблицу
2. удаляеш все столбцы в DataGridView
3. добавляешь в DataGridView столько столбцов сколько строк в таблице
Это циклом делать?

Цитата Сообщение от nedel Посмотреть сообщение
ну да, столбцы в DataTable должны иметь уникальное имя
Они и так уникальные, повторяющихся нет...
0
nedel
618 / 607 / 358
Регистрация: 09.04.2014
Сообщений: 1,442
Завершенные тесты: 1
09.10.2014, 17:10 8
Цитата Сообщение от kuzya987 Посмотреть сообщение
Они и так уникальные, повторяющихся нет...
видать вы ошибаетесь
Цитата Сообщение от kuzya987 Посмотреть сообщение
но ругается, пишет что столбец с таким именем уже есть.
Добавлено через 35 секунд
Цитата Сообщение от kuzya987 Посмотреть сообщение
Это циклом делать?
а как иначе?
0
kuzya987
2 / 2 / 0
Регистрация: 05.09.2010
Сообщений: 32
10.10.2014, 10:02  [ТС] 9
Получилось:

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
 
            DataTable table = new DataTable("CH_VOLS");
            DataTable source = new DataTable();
            SQLConnectionPTB.connection.Open();
...
                //Запрос к БД
...
                SqlDataReader r1 = cs1.ExecuteReader();
                table.Load(r1);
                int c = table.Rows.Count - 1;
                source.Columns.Add("Param");
                for (int x = 0; x <= c; x++)
                {
                    source.Columns.Add(table.Rows[x][0].ToString());
                }
                DataRow r;
                for (int k = 1; k < table.Columns.Count; k++)
                {
                    r = source.NewRow();
                    r[0] = table.Columns[k].ToString();
                    for (int j = 1; j <= table.Rows.Count; j++)
                        r[j] = table.Rows[j - 1][k];
                    source.Rows.Add(r);
                }
                dgrVOLS.Columns.Clear();
                dgrVOLS.DataSource = source;
                dgrVOLS.AutoResizeColumns();
0
10.10.2014, 10:02
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.10.2014, 10:02

Добавление записи в базу данных MSSQL
Добрый вечер, возникла проблема при добавлении записи в БД. У меня есть две...

Добавление записи в таблицу MSSQL 2008
Почему-то, при добавлении записи в таблицу с использование ADO.NET EF не...

Обновление MSSQL 2008 R2 до SP3
Добрый день, Уважаемые форумчане. Решил обновить MSSQL 2008 R2 до SP3 ,...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru