|
1 / 1 / 2
Регистрация: 04.08.2014
Сообщений: 71
|
|||||||||||||||||||||
Выборка из БД в DataGridView: Почему последняя отмеченная строка не попадает в новый запрос04.08.2014, 20:21. Показов 2390. Ответов 14
Метки нет (Все метки)
Доброго времени суток! Помогите новичку разобраться.
Есть форма для работы с базой Access. таблица отображается в гриде:
Вопроса 2: 1) Почему последняя отмеченная строка не попадает в новый запрос (по какой-то причине checkbox в последней отмеченной строке читается как false хотя отмечен как true) 2) И почему поле с checkbox'ом перемещается из столбца 2 в 4, хотя при запуске таблица этим же запросом формируется правильно. Надеюсь доступно объяснил проблему. Подскажите что не так или ткните носом в ссылку, поиском не нашел как решить подобную проблему. Заранее спасибо!
0
|
|||||||||||||||||||||
| 04.08.2014, 20:21 | |
|
Ответы с готовыми решениями:
14
DataGridView. Не сохраняется последняя строка Чем является отмеченная строка?
|
|
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
|
|||||||||||||
| 05.08.2014, 05:48 | |||||||||||||
Сообщение было отмечено Hoffman как решение
РешениеКстати, появился встречный вопрос: DbCommand (OleDbCommand является наследником DbCommand), можно выполнить тремя способами: ExecuteReader, ExecuteScalar и ExecuteNonQuery. ExecuteReader возвращает DbReader, с помощью которого можно прочитать результирующий набор процедуры (результат выполнения SELECT'а внутри процедуру). ExecuteScalar возвращает значение первого столбца из первого строки результирующего набора. ExecuteNonQuery ни какого результирующего набора не возвращает. DataAdapter - это совокупность комманд разного назначения: для выборки, для добавления. для изменения и для удаления данных. Внутри метода DataAdapter.Fill открывается соединение, если оно было закртыо, выполняется SelectCommand.ExecuteReader, из которого заполняется таблица, передеваемая в Fill в качестве параметра, после чего закрывается подключение, если оно изначально было закрыто. То есть, чтобы заоплнить таблицу результирующим набором из DataAdapter.SelectCommand, достаточно вызывать метод DataAdapter.Fill. Надеюсь, доступно объяснил? А теперь, внимание, вопросы: 1. Зачем в следующих кусках кода вы вызываете ExecuteNonQuery, который не возвращает результирующего набора, для SelectCommand, которая существует ради того, чтобы возвращать результирующий набор? 2. Зачем вы вообще вставили следующие куски кода в своей программе, если ранее вы используете метод DataAdapter.Fill, который прекрасно и правильно отрабатывает?
1
|
|||||||||||||
|
1 / 1 / 2
Регистрация: 04.08.2014
Сообщений: 71
|
||||||||||||||||||
| 05.08.2014, 08:54 [ТС] | ||||||||||||||||||
Если я правильно понял без этого:
0
|
||||||||||||||||||
|
1057 / 864 / 195
Регистрация: 31.03.2010
Сообщений: 2,521
|
||||||
| 05.08.2014, 11:09 | ||||||
|
Hoffman,
1) Вообще удалите эти три строчки - все и без них будет работать 2) в конструкторе формы в DataGride вашем создайте ВСЕ столбцы(ПКМ-правка столбцов) запроса и в поле DataPropertyName укажите имя столбца в запросе. Это будет намного лучше чем вызывать GridStyle при каждом запросе. 3) перед привязкой данных (grid.DataSource = dt; ) укажите сначала
собственно по вопросу: измененные данные гарантированно будут сохранены лишь после потери фокуса DataGrid'ом. в любой другой момент нет гарантии что измененные данные сохранились
1
|
||||||
|
1057 / 864 / 195
Регистрация: 31.03.2010
Сообщений: 2,521
|
|
| 05.08.2014, 11:19 | |
|
Далее следующий очень интересный вопрос: у вас УЖЕ загружены данные из БД,вы же для вывода печати выполняете полноценный запрос чтоб ПОВТОРНО загрузить данные.
Вот в свое время нашел простенькую реализацию печати грида, правда ее еще напильником следует шлифовать, но в 9 из 10 случаях вполне справляется PrintDGV.zip второй вариант использовать программы-отчеты(напр., Crystal Reports, сам использую FastReport)
0
|
|
|
1057 / 864 / 195
Регистрация: 31.03.2010
Сообщений: 2,521
|
|||||||||||
| 05.08.2014, 11:36 | |||||||||||
Сообщение было отмечено Hoffman как решение
Решение
а при выводе в Excel просто добавляем одну сточку, чтоб печатать только выделенные строчки:
З.Ы. тот же FastReport позволяет сохранить отчет в Excel(и другие форматы), а не только выводить на печать. Добавлено через 10 минут ![]() зачем для вычисления сумм 5 раз гонять цикл, почему нельзя выполнить все вычисления в одном цикле? к тому же лучше брать значения не из grid, а из DataTable
1
|
|||||||||||
|
1 / 1 / 2
Регистрация: 04.08.2014
Сообщений: 71
|
||||||
| 05.08.2014, 11:49 [ТС] | ||||||
|
Добавлено через 8 минут
0
|
||||||
|
1057 / 864 / 195
Регистрация: 31.03.2010
Сообщений: 2,521
|
|||
| 05.08.2014, 12:00 | |||
|
Вместо этого можно один раз создать столбцы указать чтоб они не создавались(AutoGenerateColumns). а чтоб было понятно из какого столбца в источнике данных DataTable следует брать значение созданному столбцу указываем в свойстве DataPropertyName столбца DataGridView имя соответственного столбца в DataTable.
1
|
|||
|
1 / 1 / 2
Регистрация: 04.08.2014
Сообщений: 71
|
||
| 05.08.2014, 12:29 [ТС] | ||
|
0
|
||
|
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
|
|
| 05.08.2014, 13:11 | |
|
Hoffman, колонка у вас съезжает потому, что коллекция колонок не очищается полностью при изменении DataSource. Из коллекции удаляются ненужные колонки, добавляются отсутствующие. После экспорта в EXCEL колонки, которые были в гриде для экспорта в EXCEL, остаются на своих местах. аотсутствующие в выборке для экспорта в EXCEL колонки добавляются, начиная с позиции 3.
Вам вообще грид не нужен для экспорта в EXCEL. DataTable с головой хватит. По хорошему нужно вообще dt, по полю "V" (по крайней мере так вы его обозвали в методе GridStyle) отфильтровать и кинуть результат в EXCEL не заморачиваясь с перевыборкой данных. Но это требует более глобальных переделок, нежели отказ от грида при экспорте в EXCEL)
1
|
|
|
1 / 1 / 2
Регистрация: 04.08.2014
Сообщений: 71
|
|||||||||||||||||
| 05.08.2014, 21:34 [ТС] | |||||||||||||||||
С использованием всех советов получилось вот что:
Варианта придумал два: 1) ручками уже в листе Excel скрыть пустые строки (или может это можно как то программно сделать? не нашел пока как) 2) отсортировать grid перед экспортом по логическому полю (почти как посоветовал kodv). Могу отсортировать по любому текстовому полю:
0
|
|||||||||||||||||
|
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
|
||||||
| 06.08.2014, 06:22 | ||||||
|
Hoffman, я же вам говорю, не используйте грид для экспорта. Используйте, допустим, отдельный DataView (отдельный для того, чтобы отображение в гриде ни как не менялось), и все будет проще и правильнее:
1
|
||||||
|
1 / 1 / 2
Регистрация: 04.08.2014
Сообщений: 71
|
||||||
| 06.08.2014, 19:08 [ТС] | ||||||
|
Всем огромное спасибо!!!! Окончательный метод выглядит так:
0
|
||||||
|
1057 / 864 / 195
Регистрация: 31.03.2010
Сообщений: 2,521
|
||||||
| 07.08.2014, 16:14 | ||||||
1
|
||||||
|
1 / 1 / 2
Регистрация: 04.08.2014
Сообщений: 71
|
|
| 07.08.2014, 16:20 [ТС] | |
|
Еще раз спасибо, Learx!!! Тему можно закрывать.)
0
|
|
| 07.08.2014, 16:20 | |
|
Помогаю со студенческими работами здесь
15
Почему считывается только последняя строка? Почему-то заполняется только последняя ячейка DataGridView Datagridview как узнать, что текущая строка последняя (пустая для ввода новых данных пользователем) Работаю с файлом *.txt. Прога ведет себя странно если последняя строка файла пуста. Почему так? Почему не удаляется единственная строка из DataGridView? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ВВЕДЕНИЕ
Выполняя задание на управление насосной группой заполнения резервуара,. . .
|
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|