Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.87/15: Рейтинг темы: голосов - 15, средняя оценка - 4.87
1 / 1 / 0
Регистрация: 26.10.2017
Сообщений: 108
.NET 4.x

Отображение столбца в DataGridView при выборе даты в MonthCalendar

27.08.2018, 12:15. Показов 3707. Ответов 28

Студворк — интернет-сервис помощи студентам
Добрый день, еще раз!
Есть форма, на форме ListBox и Panel, на которой расположены DataGridView и MonthCalendar (см. скрины). При загрузке формы DataGridView заполняется из базы:
VB.NET
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
28
29
30
31
32
33
34
35
36
37
38
39
40
    Private Sub MainForm_Load(sender As Object, e As EventArgs) Handles MyBase.Load
         MonthCalendar1.TodayDate = Now  'БРИГАДА - 1    
         ListBox1.SelectedIndex = 0
    End Sub
 
    Private Sub ListBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListBox1.SelectedIndexChanged
        'БРИГАДА - 1  
        If ListBox1.SelectedIndex = 0 Then
            PanelBrig1.Visible = True
            Brig_1()
         'Тут перебор панелей...
        End If
        LabelBrig.Text = ListBox1.SelectedItem
    End Sub
 
    Sub Brig_1()
        DataGridView1.AllowUserToAddRows = False 'Убираем последнюю пустую строчку, которая для новых записей
 
        '======== Процедура чтения всей таблицы из базы 
        DT.Clear() 'Очищаем таблицу
        SqlCom = New OleDb.OleDbCommand("SELECT [Cod], [FIO], [Dolj], [KTU], [" & MonthCalendar1.TodayDate.ToString("ddMMyyyy") & "] FROM Brigada", Con) ' Указываем строку запроса и привязываем к соединению
        Con.Open() ' Открываем соединение
        SqlCom.ExecuteNonQuery() 'Выполняем запрос
        DA = New OleDb.OleDbDataAdapter(SqlCom) 'Через адаптер получаем результаты запроса
        DA.Fill(DT) ' Заполняем таблицу результатами
        Me.DataGridView1.DataSource = DT ' Привязываем Грид к источнику данных
        Con.Close() ' Закрываем соединение
        DataGridView1.Columns(0).Visible = False
 
        'Задаем ширину столбцов (задается только ПОСЛЕ создания DataGridView)
        With DataGridView1
            .Columns("FIO").Width = 200
            .Columns("FIO").DefaultCellStyle.BackColor = Color.LightGray
            .Columns("Dolj").Width = 120
            .Columns("Dolj").DefaultCellStyle.BackColor = Color.LightGray
            .Columns("KTU").Width = 50
            .Columns("KTU").DefaultCellStyle.BackColor = Color.LightGray
            .Columns(MonthCalendar1.TodayDate.ToString("ddMMyyyy")).Width = 40
        End With
    End Sub
Загружается все нормально, все работает. В базе создаются столбцы с заголовками из (MonthCalendar1.TodayDate.ToString("ddMM yyyy") при загрузке формы (в коде не стал писать).
Стоит в MonthCalendar1 выбрать дату, то DataGridView1 должен отобразить столбец с выбранной датой. НО! DataGridView1 не обновляется, а столбцы "дописываются" в конец грида! Причем только которые именно нужны, т.е. с датой! Никак не могу победить обновление DataGridView1!
Прошу Вашей помощи, уважаемые форумчане!
Вот код для MonthCalendar1:
VB.NET
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
28
29
30
31
32
33
    Private Sub MonthCalendar1_DateChanged(sender As Object, e As DateRangeEventArgs) Handles MonthCalendar1.DateChanged
        'DataGridView1.Columns.Clear() 'Очищаем таблицу
        'DataGridView1.DataSource = Nothing
 
        '======== Процедура чтения всей таблицы из базы 
        Dim Con As New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & PthWorkBase & "\" & LabelPR.Text & ".asm" & "\Brig1.tdb") ' Переменная для подключения базы
        DT.Clear() 'Очищаем таблицу
        SqlCom = New OleDb.OleDbCommand("SELECT [Cod], [FIO], [Dolj], [KTU], [" & MonthCalendar1.SelectionStart.ToString("ddMMyyyy") & "] FROM Brigada", Con) ' Указываем строку запроса и привязываем к соединению
 
        Con.Open() ' Открываем соединение
        SqlCom.ExecuteNonQuery() 'Выполняем запрос
        'DataGridView1.DataSource = Nothing
        ' DataGridView1.Refresh()
        DA = New OleDb.OleDbDataAdapter(SqlCom) 'Через адаптер получаем результаты запроса
        DA.Fill(DT) ' Заполняем таблицу результатми
        Me.DataGridView1.DataSource = DT ' Привязываем Грид к источнику данных
        Update()
        Con.Close() ' Закрываем соединение
        DT.AcceptChanges()
        DataGridView1.Columns(0).Visible = False
 
        'Задаем ширину столбцов (задается только ПОСЛЕ создания DataGridView)
        With DataGridView1
            .Columns("FIO").Width = 200
            .Columns("FIO").DefaultCellStyle.BackColor = Color.LightGray
            .Columns("Dolj").Width = 120
            .Columns("Dolj").DefaultCellStyle.BackColor = Color.LightGray
            .Columns("KTU").Width = 50
            .Columns("KTU").DefaultCellStyle.BackColor = Color.LightGray
            .Columns(MonthCalendar1.SelectionStart.ToString("ddMMyyyy")).Width = 40
        End With
        'PanelBrig1.Refresh()
    End Sub
P.S. PanelBrig1.Refresh(), DataGridView1.Columns.Clear(), DataGridView1.DataSource = Nothing не помогают.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.08.2018, 12:15
Ответы с готовыми решениями:

Сравнение при выборе даты в monthCalendar
Извините за глупость(я только начинаю изучать C#) на работе дали задание написать программу что бы показывала дни рождения сотрудников. ...

При выборе даты в MonthCalendar, нужно отображать все в разные edit
При выборе даты в MonthCalendar, нужно отображать все в разные edit. Например: В edit1: 2015 В edit2: 02 В edit3: 05

При выборе даты в dataTimePicker отображать соответствующую таблицу в DataGridView
Здравствуйте, прошу помощи по такому вопросу: мне необходимо при выборе даты в dataTimePicker отображать соответствующую таблицу в...

28
1 / 1 / 0
Регистрация: 26.10.2017
Сообщений: 108
09.09.2018, 20:03  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от MrCrown Посмотреть сообщение
Снабдил все XML-подсказками.
За это вообще огромное СПАСИБО! Сижу разбираюсь, подгоняю под свои нужды, но все самое основное тут имеется. Посмотрел саму базу, у меня немного не так было сделано, не было каскадного удаления, только обновление. Да и объединение таблиц сделано отлично. Пробовал сам, но не хватило знаний. В общем за пример спасибо еще раз, на его основе многое переделал.

Добавлено через 1 час 2 минуты
Правда немного запутался с переменными... , пришлось даже список составить отдельно )))
0
1550 / 1527 / 325
Регистрация: 03.10.2012
Сообщений: 1,558
10.09.2018, 10:32
Цитата Сообщение от _Radik_ Посмотреть сообщение
они вообще для чего нужны в рамках программы на vb.net
Цитата Сообщение от MrCrown Посмотреть сообщение
Здесь они нам нужны для сохранения целостности данных и для каскадного
удаления записей.
При удалении записи из одной таблицы, ядро базы автоматически удаляет все связанные с ней записи из
других таблиц.
Суммируя остальные ваши вопросы, скажу так: DataSet-ом не пользуюсь, предпочитаю формировать
запросы вручную, с помощью SQL. Хорошо это или плохо, не знаю, скорее, это дело привычки.
По мне так и старый добрый рекордсет из DAO ничуть не плох. К тому же, меня терзают смутные
сомнения - что будет с памятью, окажись в DataSet гигабайты записей.
0
1 / 1 / 0
Регистрация: 26.10.2017
Сообщений: 108
11.09.2018, 16:51  [ТС]
MrCrown, при объявлении глобальной переменной
VB.NET
1
Public con As New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & PthWorkBase & "\Test.asm" & "\db3.tdb")
мы подключаемся только к одной базе. У меня база выбирается из ComboBox'а с предыдущей формы, также имя базы записывается в ini-файл. Как сделать, чтобы вместо "Test" - был текст с предыдущей формы? т.е. примерно так (Start.ComboBox1.Text):
VB.NET
1
Public con As New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & PthWorkBase & "\" & Start.ComboBox1.Text & ".asm" & "\db3.tdb")
Я так понимаю, что при объявлении глобальной переменной нельзя присвоить тоже значение переменной? Как выйти из ситуации?
0
Лень — мое второе и
 Аватар для Orlangur
3231 / 2418 / 688
Регистрация: 28.11.2014
Сообщений: 3,603
Записей в блоге: 3
11.09.2018, 16:59
zhigalkin_p, объявить её как new, к примеру
VB.NET
1
 con = New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & PthWorkBase & "\" & Start.ComboBox1.Text & ".asm" & "\db3.tdb")
1
1 / 1 / 0
Регистрация: 26.10.2017
Сообщений: 108
11.09.2018, 17:59  [ТС]
Цитата Сообщение от Orlangur1991 Посмотреть сообщение
объявить её как new
Это что, придется в каждой процедуре ее объявлять? Глобально - удобнее, объявил один раз - и все.
Тут же я понимаю, прежде чем "con" присвоить новое значение, ее надо опять таки объявить сначала. А вне процедуря не получается..

Добавлено через 4 минуты
У меня con все время подчеркивается красным и пишет "Ожидалось объявление", и при
VB.NET
1
Public con As New OleDb.OleDbConnection
тоже не прокатывает.
0
Лень — мое второе и
 Аватар для Orlangur
3231 / 2418 / 688
Регистрация: 28.11.2014
Сообщений: 3,603
Записей в блоге: 3
11.09.2018, 18:35
zhigalkin_p, нет, переменная объявляется глобально, все верно, а после выбора значения в combobox её значение просто изменяется
0
1 / 1 / 0
Регистрация: 26.10.2017
Сообщений: 108
11.09.2018, 18:43  [ТС]
Цитата Сообщение от zhigalkin_p Посмотреть сообщение
Как сделать, чтобы вместо "Test" - был текст с предыдущей формы? т.е. примерно так (Start.ComboBox1.Text)
Ну или хотя бы считывался из ini-файла?

Добавлено через 4 минуты
Т.е. я в форме Satrt при нажатии на кнопку (для примера) присваиваю con новое значение. Тогда по идее оно должно считаться уже в следующей форме?
Примерно так: нажать кнопку -> присваивается новое значение con -> открывается новая форма -> в ней считывается значение con -> новая форма запускается -> форма Start закрывается?

Добавлено через 3 минуты
Не, выдает ошибку ""System.NullReferenceException: "Ссылка на объект не указывает на экземпляр объекта."
0
Лень — мое второе и
 Аватар для Orlangur
3231 / 2418 / 688
Регистрация: 28.11.2014
Сообщений: 3,603
Записей в блоге: 3
11.09.2018, 18:44
zhigalkin_p, верно, так как переменная глобальная (и скорее всего объявлена в модуле), то присвоить ей значение, ровно как и считать его,можно из любого места программы
0
1 / 1 / 0
Регистрация: 26.10.2017
Сообщений: 108
11.09.2018, 18:52  [ТС]
Да, вот в модуле:
VB.NET
1
Public con As New OleDb.OleDbConnection
Вот при нажатии на кнопку в форме Start:
VB.NET
1
2
3
        Con = New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & PthWorkBase & "\" & Me.ComboBox1.Text & ".asm" & "\db3.tdb")
        MainForm.Show()
        Me.Close()
Но при открытии MainForm выдает ошибку.

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

Добавлено через 3 минуты
Во блин! Сейчас только понял, что у меня в форме Start уже есть объявление con. Просто переименовал в con2 и все заработало!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.09.2018, 18:52

Отображение таблиц в DataGridView при выборе элемента в ListBox
Всем здравствуйте! Можете подсказать как реализовать следующее: У меня есть ListBox там 3 предопределенных элемента и есть DataGridView,...

Неправильное отображение даты при импорте данных из Excel в DataGridView
Привет Импортирую данные из Excel в DataGridView: private void button1_Click(object sender, EventArgs e) { ...

При выборе даты в календаре - заполнять ячейки по порядку до определенной даты и рядом высвечивать день недели
Здравствуйте. Нужна ваша помощь. В программе есть написанный на VBA календарь. нужно написать код, что бы при выборе даты заполнялись...

Нужно, чтобы при выборе элемента в одном DataGridView отображались связанные данные в другом DataGridView
Есть две связанные таблицы и соответственно два DataGridView, нужно, чтобы при выборе элемента в одном DataGridView отображались связанные...

Выборка даты из БД и отображение в DataGridView в определенном формате
Доброго времени суток, уважаемые! Подскажите пожалуйста решение) застопорился в выводе даты в dataGridView. Суть такая: получаю...


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

Или воспользуйтесь поиском по форуму:
29
Ответ Создать тему
Новые блоги и статьи
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки Правым кликом по серверу -> отладочная информация -> edit Заменить "net": "raw", на "net": "tcp", Нажать кнопку reload.
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru