|
Каждому свое
533 / 219 / 81
Регистрация: 05.08.2013
Сообщений: 1,614
|
||||||
Стирание ранее заполненного DataSet и повторное заполнение. Нарушение отображения в DataGridView05.08.2017, 17:29. Показов 2011. Ответов 9
Метки нет (Все метки)
Доброго времени суток, Господа. У меня возникла проблема, которую не могу решить уже не первый день...
Вообщем есть БД, в ней есть несколько таблиц, я гружу эти таблицы в DataSet, добавляю за счет DataSet.Tables.Add(newTable), затем подвязываю этот DataSet к BindingSource, а BindingSource подвязываю непосредственно к DataGridView. Устанавливаю DataGridView.DataMember на ту таблицу из DataSet, какую хочу отображать. Вообщем все по стандарту.Не буду приводить весь процесс того, что мне нужно сделать, упростим. Создадим две кнопки. Одна будет стирать из DataSet всю информацию, соответственным образом должен отобразиться пустой DataGridView. Вторая кнопка должна снова заполнять DataSet теми же данными, что и вначале, и, как я понимаю, DataGridView должен это все вновь отобразить. Задача элементарная, но после того как я первый раз стираю информацию из DataSet, второй раз я не могу больше загрузить в него ничего. Точнее могу, информацией он заполняется, но DataGridView больше отказывается ее отображать. Из DataSet удалял инфу и так DataSet.Clear(), и так DataSet.Reset(), и так DataSet.Tables.Clear(), и комбинировал эти вызовы - бесполезно.Пытался по нажатию второй кнопки(которая заново загружает инфу в DataSet), снова подвязывать DataSet на BindingSource, а BindingSource на DataGridView - тоже безрезультатно. Короче как я только уже не делал... Помогите пожалуйста, как мне реализовать то, что я хочу Добавлено через 3 часа 53 минуты Не знаю правильно или нет, но сделал так:
0
|
||||||
| 05.08.2017, 17:29 | |
|
Ответы с готовыми решениями:
9
Стирание ранее нарисованных линий Повторное открытие проекта с ранее на нём нажатой кнопкой Заполнение DataSet данными из другого DataSet |
|
360 / 287 / 76
Регистрация: 21.06.2016
Сообщений: 1,115
|
|
| 06.08.2017, 19:03 | |
|
У Вас биндинг служит только для перемычки между БД и гридом? Тогда зачем? Можно тогда обойтись напряму, без лишних объектов памяти, и сразу кидать датасорс вместо биндингсорсов, как по мне. Я то думал, вы создаете отдельный класс-модель данных, и биндите его через класс. А так... лишние действия получаются.
0
|
|
|
644 / 528 / 324
Регистрация: 20.05.2015
Сообщений: 1,469
|
|||
| 08.08.2017, 08:56 | |||
|
0
|
|||
|
Каждому свое
533 / 219 / 81
Регистрация: 05.08.2013
Сообщений: 1,614
|
||
| 08.08.2017, 18:04 [ТС] | ||
|
0
|
||
|
360 / 287 / 76
Регистрация: 21.06.2016
Сообщений: 1,115
|
|
| 08.08.2017, 21:47 | |
|
Та ну ладно. В 3 строке очищаете таблицы, а в 4-ой создаете новый датасет, так нафиг тогда 3-я строка? И всё равно вопрос оставлю - зачем bindingsource? Да еще и так костыльно? Ведь это же явно не в определении модели прописывается, а в каком-то локальном методе, типа нажатия на кнопку? Сам биндинг прекрасно отрабатывает изменения в обеих сторонах - и модели и UI, ему не нужно каждый раз указывать что и куда Вы подвязываете. Но делается это на немного выше уровне, на уровне связывания моделей. Вот и вопрос поэтому мой так звучал.
0
|
|
|
785 / 616 / 273
Регистрация: 04.08.2015
Сообщений: 1,713
|
||
| 09.08.2017, 13:37 | ||
|
0
|
||
|
Каждому свое
533 / 219 / 81
Регистрация: 05.08.2013
Сообщений: 1,614
|
|||||||||
| 09.08.2017, 17:53 [ТС] | |||||||||
|
hoolygan,
![]() Если Вы имеете ввиду, напрямую DataSet подсоединять к DataGridView, то я так тоже делал, результат один и тот же. Без разницы, с BindingSource или без него.Igr_ok, Пробовал и DataGridView.Update() и еще что-то там. Все перепробовал уже.Еще раз, чтобы все поняли чего я хочу добиться: 1. Есть DataSet и DataGridView(BindingSource опустим, так как он роли не играет). Есть несколько одинаковых по структуре таблиц, но данные в них разные. Поэтому средствами Visual Studio у меня создается автоматически DataSet, с такой структурой, какая мне нужна. 2. Я беру DataGridView, и в редакторе Visual Studio начинаю редактировать колонки, так как я хотел бы их видеть( какая-то растянута, какая-то невидна будет вовсе, какая-то еще что-то там). Вообщем настраиваю внешний вид колонок DataGridView через редактор. Все колонки готовы. 3. В коде, я заполняю DataSet, и передаю его как источник в DataGridView(опять же можно все через BindingSource - роли не играет) для отображения. Все, при первом запуске программы все заполняется и все отображается отлично. 4. Теперь, я хочу, к примеру, заменить подгруженную ранее в DataSet таблицу на другую, с той же структурой, и хочу чтобы она отобразилась в DataGridView. Так вот, если я просто создам другой DataSet2 и загружу туда данные, а потом передам его как источник данных в DataGridView, то все мои настройки колонок, которые были описаны в пункте 2, будут сбиты, тоесть тупо отобразятся ВСЕ колонки из новой таблицы, будут стандартные имена, нихрена не выровнено и т.п. Я бы хотел этого избежать. Поэтому я понял, что нужно что-то делать с первым DataSet'ом, который создался средстами Visual Studio в пункте 1. Я начал разными способами пробовать стереть информацию, ранее загруженную в этот DataSet, для того, чтобы загрузить новую из новой таблицы. При разных манипуляциях с DataSet'ом, таких как DataSet.Clear(), DataSet.Reset() и т.п., я увидел, что колонки действительно не сбиваются, НО новая информация перестает отображаться в DataGridView. Как я только не пробовал, ничего не получалось. И тут, в один момент, методом научного тыка и вуду программирования, я нашел способ, чтобы получить то, чего я хочу....и это...барабанная дробь... Вот он, как я уже писал выше:
0
|
|||||||||
|
360 / 287 / 76
Регистрация: 21.06.2016
Сообщений: 1,115
|
|
| 10.08.2017, 15:57 | |
|
Момент конечно очень интересный, но кажется мне, что у Вас стоят обработчики на много событий, и Вы просто не смотрите в их сторону. Просто так не нужно делать резет, потом новый объект - это глупо, потому что старый все равно убьется мусорщиком. Так что проблема явно не в этом куске кода.
Да и гриду (если это не юзерконтрол, а стандартный - потому что мало ли что там прописано может быть лишнего) абсолютно пофигистичен на то, как именуется датасет - ему важны названия полей, и не более того, так что можно грузить и 10 и 500 датасетов, и 100500 DataTable - но если названия полей совпадают - то он их покажет нормально. Так что смотреть нужно глубже - а это больше напоминает огромный костылище, а значит ошибка не тут, и точно что-то не так связываете.
0
|
|
|
785 / 616 / 273
Регистрация: 04.08.2015
Сообщений: 1,713
|
||||||
| 10.08.2017, 19:30 | ||||||
|
Bretbas, Бывают случаи, когда Refresh не обновляет грид. Для этого рекомендуют
0
|
||||||
|
Каждому свое
533 / 219 / 81
Регистрация: 05.08.2013
Сообщений: 1,614
|
|
| 11.08.2017, 08:00 [ТС] | |
|
Igr_ok, Так тоже делал. Мне Usaga говорил так попробовать. Тоже безрезультатно
0
|
|
| 11.08.2017, 08:00 | |
|
Помогаю со студенческими работами здесь
10
Запись данных из программно заполненного DataGridView в MS Access Повторное заполнение ComboBox DataSet Visualizer проблема отображения данных Повторное заполнение progressBar из таймера При загрузке формы происходит заполнение DataSet, но заполнение происходит не вполне корректно Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования.
Часть библиотеки BedvitCOM
Использованы. . .
|
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога
SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
|
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога
SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
|
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
|
|
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога
SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
|
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога
Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip"
Извлеките архив и вы увидите. . .
|
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога
Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д.
Сборка примера
Скачайте. . .
|
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|