Ситуация такая: есть табконтрол с четырьмя вкладками.
На каждой вкладке находится по датагриду.
Программно забираю из базы нужные данные и заливаю их грид.
Далее добавляю колонку с чек боксом.
И в цикле проверяю соответствует ли ячейка определенному условию, и если соответствует то, ставлю галочку в чек бокс
При загрузке формы открывается первая вкладка и все просто супер:
данные отображаются, галочки ставятся.
При щелчке по второй вкладке, данные загружаются, но галочки не проставляются. Хотя условие выполняются.
Если активировать другую вкладку, а потом перейти на эту, то все начинает работать.
Даже не знаю от куда ноги растут.
Вот код переключения между вкладками:
- Код: Выделить всё
Private Sub TabControl1_Selecting(ByVal sender As Object, ByVal e As System.Windows.Forms.TabControlCancelEventArgs) Handles TabControl1.Selecting
Select Case TabControl1.SelectedIndex
Case 0
RefPriem()
Case 1
RefPerem()
Case 2
End Select
End Sub
Это код загрузки данных в первую вкладку
- Код: Выделить всё
Private Sub RefPriem()
Dim y As Integer
Dim grd As New DataGridViewCheckBoxColumn()
'прием
grdPriem.Columns.Clear()
lblHelp.Text = "Красным цветом выделены сотрудники, имена которых уже есть в базе. Если вы уверены что этого сотрудника тоже необходимо занести в базу, то поставьте напротив него галочку."
RSOpen("SELECT FIO 'ФИО', DateRojd 'Дата рождения', Obrazov 'Образование', Prof 'Профессия', DateVix 'Дата выхода на работу', Doljn 'Должность', TipRab 'Тип работника', Tel 'Телефон', Sklad 'Место работы' FROM 1c WHERE (tipmanip = 'прием')")
DA = New OleDb.OleDbDataAdapter
DT = New DataTable
DA.Fill(DT, RS)
grdPriem.DataSource = DT
DBC()
With grd
.HeaderText = "Подкачать"
.AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells
.DisplayIndex = 10
.Name = "Podk"
.ReadOnly = False
End With
grdPriem.Columns.Add(grd)
For y = 0 To grdPriem.Rows.Count - 1
If grdPriem.Item(8, y).Value.ToString <> "" Then
grdPriem.Item("Podk", y).Value = True
End If
Next
RSOpen("SELECT rab.fio FROM 1c, rab WHERE (1c.tipmanip = 'прием') and (1c.fio = rab.fio)")
Do Until RS.EOF
For y = 0 To grdPriem.Rows.Count - 1
If grdPriem.Item(0, y).Value.ToString = RS.Fields("fio").Value.ToString Then
grdPriem.Rows(y).DefaultCellStyle.BackColor = Color.Red
Exit For
End If
Next
RS.MoveNext()
Loop
grd = Nothing
End Sub
Это код загрузки данных во вторую вкладку
- Код: Выделить всё
Private Sub RefPerem()
Dim y As Integer
Dim grd As New DataGridViewCheckBoxColumn()
'перевод
grdPere.Columns.Clear()
RSOpen("SELECT FIO 'ФИО', DateRojd 'Дата рождения', DateVix 'Дата выхода на работу', oldDoljn 'Предыдущая должность', Doljn 'Новая должность', OldSklad 'Предыдущее место работы', Sklad 'Новое место работы' FROM 1c WHERE (tipmanip = 'перевод')")
grdPere.ReadOnly = False
DA = New OleDb.OleDbDataAdapter
DT = New DataTable
DA.Fill(DT, RS)
grdPere.DataSource = DT
DBC()
With grd
.HeaderText = "Подкачать"
.AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells
.DisplayIndex = 8
.Name = "Podk"
.ReadOnly = False
End With
grdPere.Columns.Add(grd)
For y = 0 To grdPere.Rows.Count - 1
Application.DoEvents()
If grdPere.Item("Новое место работы", y).Value.ToString <> "" Then
grdPere.Item("Podk", y).Value = True
End If
Next
grd = Nothing
End Sub
При старте запускается процедура RefPriem()