Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: Базы данных, ADO.NET
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.70/10: Рейтинг темы: голосов - 10, средняя оценка - 4.70
lestat89
digital-solution.ru
22 / 33 / 10
Регистрация: 12.09.2012
Сообщений: 285
1

Во втором DataGridView отобразить данные, используя значения выбранной строчки первого DataGridView

14.11.2014, 23:47. Просмотров 1918. Ответов 24
Метки нет (Все метки)

Доброго времени суток, Ув. Форумчане!

Такой вопрос:
Во во втором DataGridView отобразить данные используя значения выбранной строчки первого DataGridView

А именно, таблица БД:
Во втором DataGridView отобразить данные, используя значения выбранной строчки первого DataGridView


Далее при выборе основной структуры (Табл. STRUCTURE) в первом гридвиеве, во втором должен происходить запрос к этой же таблице только с ID=POD , POD - выбранной строки в первом виеве.

Выглядит это так:
Во втором DataGridView отобразить данные, используя значения выбранной строчки первого DataGridView


Надеюсь понятно обьяснил..

P.S.:
БД: Firebird 2.5
MVS 2012
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.11.2014, 23:47
Ответы с готовыми решениями:

DataGridView взять данные из выбранной строки.
Добрый день. Я пишу виндовс приложение с базой данных. И у меня такой вопрос...

Определение значения ключевого поля, неотображаемого в dataGridView, по выбранной строке
Здравствуйте, недавно начал заниматься как C#, так и sqlite. Много вопросов...

Как сделать так что-бы считал данные выбранной строки в DataGridView
Доброго времени суток, не могу понять как сделать так что-бы программа смогла...

Как отобразить данные в dataGridView?
Здравствуйте друзья. У меня есть запрос к акцесовской базе SELECT...

Отобразить данные из DataGridView в TextBox
Есть необходимость некоторые данные из таблицы выводить в RichTextBox. При...

24
nmcf
6414 / 5674 / 2583
Регистрация: 14.04.2014
Сообщений: 24,016
15.11.2014, 06:04 2
Однако, у тебя криво спроектирована БД, если приходится к обращаться к таблице по ней же самой.
Создай обработчик события RowEnter и там ставь фильтр на BindingSource второго DataGridView.
0
lestat89
digital-solution.ru
22 / 33 / 10
Регистрация: 12.09.2012
Сообщений: 285
15.11.2014, 12:29  [ТС] 3
Вот как "ставь фильтр на BindingSource" до меня и не доходит.
0
nmcf
6414 / 5674 / 2583
Регистрация: 14.04.2014
Сообщений: 24,016
15.11.2014, 12:50 4
У BindingSource есть свойство Filter: http://msdn.microsoft.com/ru-ru/libr...vs.110%29.aspx
0
Петррр
6161 / 3462 / 897
Регистрация: 28.10.2010
Сообщений: 5,926
15.11.2014, 13:10 5
FAQ по ADO.NET
Третий пункт.
0
lestat89
digital-solution.ru
22 / 33 / 10
Регистрация: 12.09.2012
Сообщений: 285
16.11.2014, 13:05  [ТС] 6
Цитата Сообщение от nmcf Посмотреть сообщение
У BindingSource есть свойство Filter
Это понятно, а как в запрос передать выбранный параметр?
Цитата Сообщение от Петррр Посмотреть сообщение
FAQ по ADO.NET
Третий пункт.
Таблица у меня одна и та же. Если я в ней делаю связь (первичный-внешний) саму на себя, то мне не дает добавлять элементы(новые строки).
А без связей Ваш пример не работает - появляются восклицательные знаки в гридвиеве, остальное неизменно.

- - - - - - - - - - - - -
Т.е. как я понимаю мне каким то образом необходимо поставить фильтр для такой связи:
Во втором DataGridView отобразить данные, используя значения выбранной строчки первого DataGridView


p.s.: в скрине чуть ошибся красным цветом. Зеленым связь показана правильно, т.е.
pod - Это ID родительской структуры.
0
nmcf
6414 / 5674 / 2583
Регистрация: 14.04.2014
Сообщений: 24,016
16.11.2014, 17:19 7
Да не нужен никакой запрос. Ты загружаешь всю таблицу и привязываешь её через 2 BindingSource к двум DataGridView. Так вот при выборе строки в первом у второго просто назначь фильтр по типу:
C#
1
Filter = "ID=10"
Ну вместо 10 надо реальный код. Т. е. они оба будут показывать одну и ту же таблицу, но первый всю, а второй с фильтром по ID.
0
lestat89
digital-solution.ru
22 / 33 / 10
Регистрация: 12.09.2012
Сообщений: 285
16.11.2014, 19:10  [ТС] 8
Я читал сотню таких вариантов аля "привяжите" или "за место 10 нужен реальный код". Тема как раз про реальный код.
А более конкретно:

Как и откуда (BilingSouce, DataSet, TableAdapter) взять текущую строку гридвиева и вытащить от туда именно int ID?
0
nmcf
6414 / 5674 / 2583
Регистрация: 14.04.2014
Сообщений: 24,016
16.11.2014, 19:26 9
Читай внимательно. Я тебе уже сказал создать обработчик события RowEnter в первом DataGridView.
Индекс строки внутри обработчика будет e.RowIndex, по нему обратишься к строке и ячейке, где у тебя этот ID находится, потом назначишь Filter нужному BindingSource (как я понял, у тебя он называется sTRUCTUREBingdingSource1).
0
lestat89
digital-solution.ru
22 / 33 / 10
Регистрация: 12.09.2012
Сообщений: 285
16.11.2014, 21:10  [ТС] 10
Пытаюсь так сделать:
C#
1
2
3
4
5
 private void dataGridView1_RowEnter(object sender, DataGridViewCellEventArgs e)
        {
            int idStructure = System.Convert.ToInt32(dataGridView1.Rows[e.RowIndex].Cells["ID"].Value);
            MessageBox.Show("ID="+idStructure);
        }
В итоге:
Необработанное исключение типа "System.ArgumentException" в System.Windows.Forms.dll
Дополнительные сведения: Не удается найти столбец с именем ID.

Во втором DataGridView отобразить данные, используя значения выбранной строчки первого DataGridView

Зеленый -> выскакивает окно с ошибкой при нажатии.
Красный -> Столбец с ID есть.
0
lestat89
digital-solution.ru
22 / 33 / 10
Регистрация: 12.09.2012
Сообщений: 285
16.11.2014, 23:39  [ТС] 11
В общем проблему с ID я решил просто поставив "0" как значение столбца, но вопрос остается открытый, т.к. это не очень корректно.

Тем не менее, это дало мне возможность перейти на новый этап, где я сразу же вновь уперся)
Ближе к делу:
C#
1
2
3
4
5
6
 private void dataGridView1_RowEnter(object sender, DataGridViewCellEventArgs e) // При наведении на структуру
        {
            this.idStructure = System.Convert.ToInt32(dataGridView1.Rows[e.RowIndex].Cells[0].Value);
            // MessageBox.Show("ID="+idStructure);
            lblStep.Text = "Выбранная структура имеет "+sTRUCTURETableAdapter.GetCountPodPoID(idStructure)  +" дочерних структур";
        }
Пояснения:
Во-первых, я хотел просто изменить запрос для SOTRUDNIKI Fill() вида:
SQL
1
SELECT ID, NAME, POD, COUNT(*) AS MyCOUNT FROM SOTRUDNIKI WHERE ID=@MyPAram
что бы просто в GridView Добавить еще столбец с кол-вом "вложенных" (ID=POD) структур, но конструктор начал ругаться на что-то про агрегатные функции и GROUP BY пошарив в нете и поняв что это надолго - я решил оставить эту идею.
Следующая гениальная мысль - сделать новый запрос, чисто:
SQL
1
SELECT COUNT(*) AS MyCOUNT FROM SOTRUDNIKI WHERE ID=@MyPAram
(На него конструктор не ругается)
вытащить из него результат MyCount и показать в Label над DataGridView'ом, аля "структура имеет N сложенных структур". По единственному найденому методу FillByName конструктор меня опять таки ругает что такого метода нет, и после 2-х часов гугла я вновь у непреодолимой преграды - как вытащить от туда результат??


P.S.: NET фреймворк должен быть для простоты работы как в PHP, сделал запрос - получил ответ, а тут жесть...

Добавлено через 24 минуты
Нашел инфу про DataReader, Изменил код:
C#
1
 lblStep.Text = "Выбранная структура имеет "+sTRUCTURETableAdapter.GetCountPodPoID(idStructure).CreateDataReader().GetValue(0) +" дочерних структур";
Компилируется , но при запуске ошибка: недействительный DataReader для таблицы STRUCTURE
0
kontuPauk
301 / 299 / 125
Регистрация: 29.01.2013
Сообщений: 638
Записей в блоге: 1
Завершенные тесты: 1
16.11.2014, 23:42 12
Так у Вас проблема-то не с дотнетом, а с банальным незнанием SQL (и с нежеланием узнать)
SQL
1
SELECT ID, NAME, POD, COUNT(*) AS MyCOUNT FROM SOTRUDNIKI WHERE ID=@MyPAram GROUP BY id, name, pod
0
lestat89
digital-solution.ru
22 / 33 / 10
Регистрация: 12.09.2012
Сообщений: 285
17.11.2014, 19:56  [ТС] 13
Ну с SQL я знаком уже более 12 лет, и видимо до сих пор не понял за чем мне группировка, если мне группировать ничего не нужно?
Группировка - для группировки, а не просто так, разве нет?
- - - -
По выше обозначенным вопросам никто ничего не желает добавить?
0
nmcf
6414 / 5674 / 2583
Регистрация: 14.04.2014
Сообщений: 24,016
17.11.2014, 20:03 14
А что добавить, если ты на ходу меняешь задачу. Надо было просто отобразить отбор. А теперь уже ты считать их взялся. Сделал бы отбор и просто по количеству строк в DataGridView получил результат.
0
lestat89
digital-solution.ru
22 / 33 / 10
Регистрация: 12.09.2012
Сообщений: 285
17.11.2014, 20:16  [ТС] 15
Попробовал с группировкой - в COUNT(*) всегда значение - "1", т.е. не считает все записи.

Добавлено через 3 минуты
Цитата Сообщение от nmcf Посмотреть сообщение
А что добавить, если ты на ходу меняешь задачу. Надо было просто отобразить отбор. А теперь уже ты считать их взялся. Сделал бы отбор и просто по количеству строк в DataGridView получил результат.
Это представление структуры предприятия, в идеале сделать бы деревовидную структуру, но на это уйдет вся моя жизнь
Поэтому я хочу ограничиться отображением в датагриде подуровней структуры, что бы сразу было видно что можно провалиться и выбрать дочернюю структуру (при двойном клике).
А при одинарном клике уже работать с кнопками "редактировать", "удалить" и т.п.

Добавлено через 6 минут
Визуально:
Вложение 455381
На текущий момент есть два варианта, либо как в скрине, лтбо через Лейбол сообщать что есть дочерние структуры.
Оба варианта у меня реализовать не получается........
0
nmcf
6414 / 5674 / 2583
Регистрация: 14.04.2014
Сообщений: 24,016
17.11.2014, 20:53 16
Это представление структуры предприятия
Типа справочника с иерархией как в 1С?
Ну так тебе надо два фильтра. В верхнем - только группы, а в нижнем подгруппы выбранной группы. Запрос будет просто: выбрать всё из таблицы, а показывать выборочно с помощью фильтров.
0
lestat89
digital-solution.ru
22 / 33 / 10
Регистрация: 12.09.2012
Сообщений: 285
17.11.2014, 21:26  [ТС] 17
Цитата Сообщение от nmcf Посмотреть сообщение
Ну так тебе надо два фильтра. В верхнем - только группы, а в нижнем подгруппы выбранной группы.
Думал об этом, но вложенности подгрупп неограничены.

-

Как в 1C не видел, у нас стоит SAP.
0
nmcf
6414 / 5674 / 2583
Регистрация: 14.04.2014
Сообщений: 24,016
17.11.2014, 21:31 18
В твоём случае ведь ограничены. Первый и второй.
В 1С используется один список. Там просто элементы и элементы-группы, как папки в Проводнике. Щёлкаешь и переходишь внутрь. Может и тебе так сделать?
0
lestat89
digital-solution.ru
22 / 33 / 10
Регистрация: 12.09.2012
Сообщений: 285
17.11.2014, 21:43  [ТС] 19
Цитата Сообщение от nmcf Посмотреть сообщение
В твоём случае ведь ограничены. Первый и второй.
Почему ты так решил?
Я могу создать бесконечное число связей POD=ID.
Цитата Сообщение от nmcf Посмотреть сообщение
Там просто элементы и элементы-группы, как папки в Проводнике. Щёлкаешь и переходишь внутрь. Может и тебе так сделать?
Я и хочу так сделать через ГридВиев, показывать
 
Кол-во подструктур Название структуры
5 Отдел по персоналу
Т.е. будет видно что там еще 5 структур (Отдел по з/п, Отдел по связям с общественностью и т.п.), можно кликнуть и "провалиться" внутрь раздела. Там, конечно тоже могут быть подразделения которые по хорошему надо бы тоже учитывать при подсчете вложенных структур рекурсивно, но эту тему мы опустим
--------
Читал что еще можно выгрузить из д в список и использовать treeView, но я вроде более-менее с GridView'ом тока разобрался и эту програмку мне надо "еще вчера" Так что лучше пока сделать так как понимаю.
Да и интерфейс не очень то и "сделанный на халяву" получается (Видел хуже).
Осталось всего-то:
Корректно составить запрос:
SQL
1
2
3
4
SELECT        COUNT(*) AS MyCount, ID, NAME, POD
FROM            STRUCTURE
WHERE        (POD = @structureIndex)
GROUP BY ID, NAME, POD
@structureIndex - параметр.
Сейчас при любом раскладе в MyCount нуль.
0
nmcf
6414 / 5674 / 2583
Регистрация: 14.04.2014
Сообщений: 24,016
17.11.2014, 22:10 20
Я могу создать бесконечное число связей POD=ID.
Можешь. Но как ты их в двух DataGridView отобразишь? Или это уже отринуто? Теперь 1 DataGridView?
0
17.11.2014, 22:10
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.11.2014, 22:10

Отобразить данные из dataGridView в ListBox
Доброго времени суток! Необходимо с главной формы отобразить данные из...

Как отобразить данные из SQLite в DataGridView?
Как отобразить данные с БД SQLite в DataGridView, подскажите, пожалуйста... ...

Отобразить данные из запроса access в datagridview?
Подскажите, как можно отобразить данные из запроса access в datagridview? Есть...


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

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

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