DataGrid с CheckBox'ом

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

lord0n
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 845
Зарегистрирован: 30.06.2005 (Чт) 9:55
Откуда: Moskow

DataGrid с CheckBox'ом

Сообщение lord0n » 07.12.2006 (Чт) 12:39

Люди хелп.
Ситуация такая: есть табконтрол с четырьмя вкладками.
На каждой вкладке находится по датагриду.
Программно забираю из базы нужные данные и заливаю их грид.
Далее добавляю колонку с чек боксом.
И в цикле проверяю соответствует ли ячейка определенному условию, и если соответствует то, ставлю галочку в чек бокс

При загрузке формы открывается первая вкладка и все просто супер:
данные отображаются, галочки ставятся.
При щелчке по второй вкладке, данные загружаются, но галочки не проставляются. Хотя условие выполняются.
Если активировать другую вкладку, а потом перейти на эту, то все начинает работать.
Даже не знаю от куда ноги растут.

Вот код переключения между вкладками:
Код: Выделить всё

   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()
Теория - это когда что-то не работает и известно почему.
Практика - это когда что-то работает, но неизвестно почему.
Нам удалось совместить теорию с практикой, теперь ничего не работает и неизвестно почему.

Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 117

    TopList