S
sp
Hello
I have a problem with the refresh performance in datagrid –
when datagrid is being shown it is so slow that I can see one by one
cells is drawn
-datagrid contains about 35x40 of cells - they are generated through the
odswierz_frekfencje() function (listed below)-
-other datagrid – showing data from datasets are ok
-I suppose I have made some mistakes, could you give me a hint? which?
Sorry for crosspost!
Public Sub odswierz_frekfencje()
If status = True Then
' Me.DataGridView1.BeginEdit(False)
Dim miesiac, rok, liczba_dni As Integer
miesiac = Me.DateTimePicker1.Value.Month
rok = Me.DateTimePicker1.Value.Year
If miesiac = 1 Or miesiac = 3 Or miesiac = 5 Or miesiac = 7
Or miesiac = 8 Or miesiac = 10 Or miesiac = 12 Then
liczba_dni = 31
End If
If miesiac = 4 Or miesiac = 6 Or miesiac = 9 Or miesiac =
11 Then
liczba_dni = 30
End If
If miesiac = 2 And rok / 4 <> Math.Floor(rok / 4) Then
liczba_dni = 28
End If
If miesiac = 2 And rok / 4 = Math.Floor(rok / 4) Then
liczba_dni = 29
End If
Dim id_klasy, id_ucznia, i, j, liczba_ocen As Integer
'Dim pozycje() = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
Dim buttonColumn As New DataGridViewButtonColumn
With buttonColumn
.HeaderText = "Dodaj:"
.Name = "dodaj"
.Text = "Dodaj:"
' Use the Text property for the button text for all
cells rather
' than using each cell's value as the text for its own
button.
.UseColumnTextForButtonValue = True
End With
id_klasy = klasa.SelectedValue.row.id_klasy
With DataGridView1
.Rows.Clear()
.Columns.Clear()
.Columns.Add("nr_dziennik", "Numer w dzienniku")
.Columns("nr_dziennik").DefaultCellStyle.Font = New
Font("Courier", 12, FontStyle.Bold, GraphicsUnit.Pixel)
.Columns("nr_dziennik").Width = 50
.Columns("nr_dziennik").AutoSizeMode =
DataGridViewAutoSizeColumnMode.None
.Columns("nr_dziennik").SortMode =
DataGridViewColumnSortMode.NotSortable
.Columns.Add("uczen", "uczen")
.Columns("uczen").AutoSizeMode =
DataGridViewAutoSizeColumnMode.AllCells
.Columns("uczen").DefaultCellStyle.Font = New
Font("Verdana", 12, FontStyle.Underline, GraphicsUnit.Pixel)
.Columns("uczen").DefaultCellStyle.Alignment =
DataGridViewContentAlignment.MiddleLeft
.Columns("uczen").SortMode =
DataGridViewColumnSortMode.NotSortable
.Columns.Add("id_ucznia", "id ucznia")
.Columns("id_ucznia").Visible = False
.Columns("id_ucznia").SortMode =
DataGridViewColumnSortMode.NotSortable
.Columns.Add("id_klasy", "id klasy")
.Columns("id_klasy").Visible = False
.Columns("id_klasy").SortMode =
DataGridViewColumnSortMode.NotSortable
.Columns.Add(buttonColumn)
.Columns("dodaj").Visible = False
.Columns("dodaj").SortMode =
DataGridViewColumnSortMode.NotSortable
.Rows.Add()
.Rows(0).Cells(0).ReadOnly = True
.Rows(0).Cells(1).ReadOnly = True
.Rows(0).Cells(2).ReadOnly = True
.Rows(0).Cells(3).ReadOnly = True
For j = 1 To liczba_dni
.Columns.Add(Str(j), Str(j))
.Columns(Str(j)).Width = 28
.Columns(Str(j)).DefaultCellStyle.Alignment =
DataGridViewContentAlignment.MiddleCenter
.Columns(Str(j)).SortMode =
DataGridViewColumnSortMode.NotSortable
.Rows(0).Cells(j + 4).Style.BackColor =
My.Settings.Item("dtyg_B_" + Trim(Str(Weekday(Str(miesiac) + "/" +
Str(j) + "/" + Str(rok)))))
.Rows(0).Cells(j + 4).Style.ForeColor =
My.Settings.Item("dtyg_F_" + Trim(Str(Weekday(Str(miesiac) + "/" +
Str(j) + "/" + Str(rok)))))
.Rows(0).Cells(j + 4).Value =
My.Settings.Item("dtyg_" + Trim(Str(Weekday(Str(miesiac) + "/" + Str(j)
+ "/" + Str(rok)))))
Next
End With
vuczniowieBindingSource.Filter = "id_klasy='" +
Str(id_klasy) + "'"
vuczniowieBindingSource.Sort = "nr_dziennik"
liczba_ocen = 0
Try
Me.Pobierz_frekfencjeTableAdapter.Fill(Me.Blizej_szkolyDataSet.pobierz_frekfencje,
New System.Nullable(Of Integer)(CType(id_klasy, Integer)), New
System.Nullable(Of Integer)(CType(miesiac, Integer)), New
System.Nullable(Of Integer)(CType(rok, Integer)))
Catch ex As System.Exception
blad.pokaz(ex.Message)
End Try
For i = 0 To vuczniowieBindingSource.Count - 1
id_ucznia = vuczniowieBindingSource.Item(i).row.id_ucznia
With DataGridView1
.Rows.Add()
.Rows(i + 1).Cells(0).Value =
vuczniowieBindingSource.Item(i).row.nr_dziennik
.Rows(i + 1).Cells(1).Value =
vuczniowieBindingSource.Item(i).row.uczen
.Rows(i + 1).Cells(2).Value = id_ucznia
.Rows(i + 1).Cells(3).Value = id_klasy
End With
'MsgBox(Pobierz_ocenyBindingSource.Count)
Me.frekfencjaBindingSource1.Filter = "id_ucznia='" +
Str(id_ucznia) + "'"
For j = 0 To Me.frekfencjaBindingSource1.Count - 1
With frekfencjaBindingSource1.Item(j).row
If .spoznienie = True Then
DataGridView1.Rows(i + 1).Cells(.liczba_dni
+ 4).Value = "S"
If .status > 0 Then
DataGridView1.Rows(i +
1).Cells(.liczba_dni + 4).Style.BackColor =
My.Settings.frek_spoznienie_poszlo
Else
DataGridView1.Rows(i +
1).Cells(.liczba_dni + 4).Style.BackColor = My.Settings.frek_spoznienie
End If
Else
If .ilosc_godzin > 0 Then
Try
DataGridView1.Rows(i +
1).Cells(.liczba_dni + 4).Value += .ilosc_godzin
Catch ex As Exception
DataGridView1.Rows(i +
1).Cells(.liczba_dni + 4).Value = .ilosc_godzin
End Try
Else
DataGridView1.Rows(i + 1).Cells(.liczba_dni
+ 4).Value = "X"
End If
If .usprawiedliwiona = True Then
If .status > 0 Then
DataGridView1.Rows(i +
1).Cells(.liczba_dni + 4).Style.BackColor = My.Settings.frek_nobecny_poszlo
Else
DataGridView1.Rows(i +
1).Cells(.liczba_dni + 4).Style.BackColor = My.Settings.frek_nobecny
End If
Else
If .status > 0 Then
DataGridView1.Rows(i +
1).Cells(.liczba_dni + 4).Style.BackColor = My.Settings.frek_nnobecny_poszlo
Else
DataGridView1.Rows(i +
1).Cells(.liczba_dni + 4).Style.BackColor = My.Settings.frek_nnobecny
End If
End If
End If
End With
Next
Next
id_ucznia = -1
Try
Me.Pobierz_frekfencje_txtTableAdapter.Fill(Me.Blizej_szkolyDataSet.pobierz_frekfencje_txt,
New System.Nullable(Of Integer)(CType(id_ucznia, Integer)), miesiac, rok)
Catch ex As System.Exception
blad.pokaz(ex.Message)
End Try
Me.DataGridView1.Visible = True
End If
End Sub
I have a problem with the refresh performance in datagrid –
when datagrid is being shown it is so slow that I can see one by one
cells is drawn
-datagrid contains about 35x40 of cells - they are generated through the
odswierz_frekfencje() function (listed below)-
-other datagrid – showing data from datasets are ok
-I suppose I have made some mistakes, could you give me a hint? which?
Sorry for crosspost!
Public Sub odswierz_frekfencje()
If status = True Then
' Me.DataGridView1.BeginEdit(False)
Dim miesiac, rok, liczba_dni As Integer
miesiac = Me.DateTimePicker1.Value.Month
rok = Me.DateTimePicker1.Value.Year
If miesiac = 1 Or miesiac = 3 Or miesiac = 5 Or miesiac = 7
Or miesiac = 8 Or miesiac = 10 Or miesiac = 12 Then
liczba_dni = 31
End If
If miesiac = 4 Or miesiac = 6 Or miesiac = 9 Or miesiac =
11 Then
liczba_dni = 30
End If
If miesiac = 2 And rok / 4 <> Math.Floor(rok / 4) Then
liczba_dni = 28
End If
If miesiac = 2 And rok / 4 = Math.Floor(rok / 4) Then
liczba_dni = 29
End If
Dim id_klasy, id_ucznia, i, j, liczba_ocen As Integer
'Dim pozycje() = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
Dim buttonColumn As New DataGridViewButtonColumn
With buttonColumn
.HeaderText = "Dodaj:"
.Name = "dodaj"
.Text = "Dodaj:"
' Use the Text property for the button text for all
cells rather
' than using each cell's value as the text for its own
button.
.UseColumnTextForButtonValue = True
End With
id_klasy = klasa.SelectedValue.row.id_klasy
With DataGridView1
.Rows.Clear()
.Columns.Clear()
.Columns.Add("nr_dziennik", "Numer w dzienniku")
.Columns("nr_dziennik").DefaultCellStyle.Font = New
Font("Courier", 12, FontStyle.Bold, GraphicsUnit.Pixel)
.Columns("nr_dziennik").Width = 50
.Columns("nr_dziennik").AutoSizeMode =
DataGridViewAutoSizeColumnMode.None
.Columns("nr_dziennik").SortMode =
DataGridViewColumnSortMode.NotSortable
.Columns.Add("uczen", "uczen")
.Columns("uczen").AutoSizeMode =
DataGridViewAutoSizeColumnMode.AllCells
.Columns("uczen").DefaultCellStyle.Font = New
Font("Verdana", 12, FontStyle.Underline, GraphicsUnit.Pixel)
.Columns("uczen").DefaultCellStyle.Alignment =
DataGridViewContentAlignment.MiddleLeft
.Columns("uczen").SortMode =
DataGridViewColumnSortMode.NotSortable
.Columns.Add("id_ucznia", "id ucznia")
.Columns("id_ucznia").Visible = False
.Columns("id_ucznia").SortMode =
DataGridViewColumnSortMode.NotSortable
.Columns.Add("id_klasy", "id klasy")
.Columns("id_klasy").Visible = False
.Columns("id_klasy").SortMode =
DataGridViewColumnSortMode.NotSortable
.Columns.Add(buttonColumn)
.Columns("dodaj").Visible = False
.Columns("dodaj").SortMode =
DataGridViewColumnSortMode.NotSortable
.Rows.Add()
.Rows(0).Cells(0).ReadOnly = True
.Rows(0).Cells(1).ReadOnly = True
.Rows(0).Cells(2).ReadOnly = True
.Rows(0).Cells(3).ReadOnly = True
For j = 1 To liczba_dni
.Columns.Add(Str(j), Str(j))
.Columns(Str(j)).Width = 28
.Columns(Str(j)).DefaultCellStyle.Alignment =
DataGridViewContentAlignment.MiddleCenter
.Columns(Str(j)).SortMode =
DataGridViewColumnSortMode.NotSortable
.Rows(0).Cells(j + 4).Style.BackColor =
My.Settings.Item("dtyg_B_" + Trim(Str(Weekday(Str(miesiac) + "/" +
Str(j) + "/" + Str(rok)))))
.Rows(0).Cells(j + 4).Style.ForeColor =
My.Settings.Item("dtyg_F_" + Trim(Str(Weekday(Str(miesiac) + "/" +
Str(j) + "/" + Str(rok)))))
.Rows(0).Cells(j + 4).Value =
My.Settings.Item("dtyg_" + Trim(Str(Weekday(Str(miesiac) + "/" + Str(j)
+ "/" + Str(rok)))))
Next
End With
vuczniowieBindingSource.Filter = "id_klasy='" +
Str(id_klasy) + "'"
vuczniowieBindingSource.Sort = "nr_dziennik"
liczba_ocen = 0
Try
Me.Pobierz_frekfencjeTableAdapter.Fill(Me.Blizej_szkolyDataSet.pobierz_frekfencje,
New System.Nullable(Of Integer)(CType(id_klasy, Integer)), New
System.Nullable(Of Integer)(CType(miesiac, Integer)), New
System.Nullable(Of Integer)(CType(rok, Integer)))
Catch ex As System.Exception
blad.pokaz(ex.Message)
End Try
For i = 0 To vuczniowieBindingSource.Count - 1
id_ucznia = vuczniowieBindingSource.Item(i).row.id_ucznia
With DataGridView1
.Rows.Add()
.Rows(i + 1).Cells(0).Value =
vuczniowieBindingSource.Item(i).row.nr_dziennik
.Rows(i + 1).Cells(1).Value =
vuczniowieBindingSource.Item(i).row.uczen
.Rows(i + 1).Cells(2).Value = id_ucznia
.Rows(i + 1).Cells(3).Value = id_klasy
End With
'MsgBox(Pobierz_ocenyBindingSource.Count)
Me.frekfencjaBindingSource1.Filter = "id_ucznia='" +
Str(id_ucznia) + "'"
For j = 0 To Me.frekfencjaBindingSource1.Count - 1
With frekfencjaBindingSource1.Item(j).row
If .spoznienie = True Then
DataGridView1.Rows(i + 1).Cells(.liczba_dni
+ 4).Value = "S"
If .status > 0 Then
DataGridView1.Rows(i +
1).Cells(.liczba_dni + 4).Style.BackColor =
My.Settings.frek_spoznienie_poszlo
Else
DataGridView1.Rows(i +
1).Cells(.liczba_dni + 4).Style.BackColor = My.Settings.frek_spoznienie
End If
Else
If .ilosc_godzin > 0 Then
Try
DataGridView1.Rows(i +
1).Cells(.liczba_dni + 4).Value += .ilosc_godzin
Catch ex As Exception
DataGridView1.Rows(i +
1).Cells(.liczba_dni + 4).Value = .ilosc_godzin
End Try
Else
DataGridView1.Rows(i + 1).Cells(.liczba_dni
+ 4).Value = "X"
End If
If .usprawiedliwiona = True Then
If .status > 0 Then
DataGridView1.Rows(i +
1).Cells(.liczba_dni + 4).Style.BackColor = My.Settings.frek_nobecny_poszlo
Else
DataGridView1.Rows(i +
1).Cells(.liczba_dni + 4).Style.BackColor = My.Settings.frek_nobecny
End If
Else
If .status > 0 Then
DataGridView1.Rows(i +
1).Cells(.liczba_dni + 4).Style.BackColor = My.Settings.frek_nnobecny_poszlo
Else
DataGridView1.Rows(i +
1).Cells(.liczba_dni + 4).Style.BackColor = My.Settings.frek_nnobecny
End If
End If
End If
End With
Next
Next
id_ucznia = -1
Try
Me.Pobierz_frekfencje_txtTableAdapter.Fill(Me.Blizej_szkolyDataSet.pobierz_frekfencje_txt,
New System.Nullable(Of Integer)(CType(id_ucznia, Integer)), miesiac, rok)
Catch ex As System.Exception
blad.pokaz(ex.Message)
End Try
Me.DataGridView1.Visible = True
End If
End Sub