Hi,
mein Vater ist Formel 1 "freak" und wollte von mir ein Program dafür. mittlerweile hat er aber dies aufgegeben (kein intresse mehr).
Der Anfang ist gemacht und es ist schade dies in der Schublade zulassen.
Vielleicht sind ja bei vbParadise Formel 1 freaks und wollen es weiter voran bringen?
Wenn nicht zeigt es wie mann ein Kalender mit einem DGV erstellen kann, und aus einer Datenbank Termine(Warmup, Quali., Rennen)
in diese DGV eintragen kann.
hier der Code:
im Modul:
im Formular:
Spoiler anzeigen
der Code zeigt wie alles geladen wird, Insert, Update und Delete könnt Ihr selbst erweitern.
und hier noch ein Bild
Bild Tabelle in Datenbank
viel spaß damit
Gruss
kasi
*Spoiler wegen überlangem Code eingefügt*
mein Vater ist Formel 1 "freak" und wollte von mir ein Program dafür. mittlerweile hat er aber dies aufgegeben (kein intresse mehr).
Der Anfang ist gemacht und es ist schade dies in der Schublade zulassen.
Vielleicht sind ja bei vbParadise Formel 1 freaks und wollen es weiter voran bringen?
Wenn nicht zeigt es wie mann ein Kalender mit einem DGV erstellen kann, und aus einer Datenbank Termine(Warmup, Quali., Rennen)
in diese DGV eintragen kann.
hier der Code:
im Modul:
VB.NET-Quellcode
- Imports System.Reflection
- Module modHelper
- Public Sub DoubleBuffered(ByVal dgv As DataGridView, ByVal setting As Boolean)
- Dim dgvType As Type = dgv.[GetType]()
- Dim pi As PropertyInfo = dgvType.GetProperty("DoubleBuffered", BindingFlags.Instance Or BindingFlags.NonPublic)
- pi.SetValue(dgv, setting, Nothing)
- End Sub
- End Module
im Formular:
VB.NET-Quellcode
- Option Strict On
- Imports System.Data.OleDb
- Public Class calVertical
- Dim ActivYear As Integer
- Private Sub calVertical_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
- modHelper.DoubleBuffered(DataGridView1, True)
- With DataGridView1
- .RowsDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft
- .AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.None
- .ScrollBars = ScrollBars.None
- .AllowUserToResizeRows = False
- .MultiSelect = False
- .RowHeadersVisible = False
- End With
- ActivYear = If(ActivYear = 0, Year(Now), ActivYear)
- IniCombos()
- End Sub
- Public Sub IniCombos()
- For i As Integer = 2019 To Year(Now) + 2
- cboYear.Items.Add(i)
- Next
- cboYear.SelectedIndex = Year(Now) - 2019
- End Sub
- Private Sub MakeHeader()
- Dim col As New List(Of String)
- col.Add("Jan")
- col.Add("Feb")
- col.Add("Mar")
- col.Add("Apr")
- col.Add("May")
- col.Add("Jun")
- col.Add("Jul")
- col.Add("Aug")
- col.Add("Sep")
- col.Add("Oct")
- col.Add("Nov")
- col.Add("Dec")
- With DataGridView1
- Dim Ft As New Font("Tahoma", 8)
- .Font = Ft
- For i As Integer = 1 To 12
- Dim key As String = "C" & i.ToString("00")
- .Columns.Add(key, col(i - 1))
- .Columns(key).Width = 40
- .Columns(key).SortMode = DataGridViewColumnSortMode.NotSortable
- Next
- End With
- DataGridView1.Rows.Add(31)
- DataGridView1.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
- End Sub
- Private Sub MakeKalendar(ByVal ActiveYear As Integer)
- With DataGridView1
- For i As Integer = 1 To 12
- Dim d As Date = New Date(ActiveYear, i, 1)
- For j As Integer = 1 To Date.DaysInMonth(ActiveYear, i)
- Dim col As Integer = (i - 1)
- .Rows(j - 1).Cells(col).Value = d.ToString("ddd dd")
- .Rows(j - 1).Height = 20
- If d.DayOfWeek = DayOfWeek.Saturday Or d.DayOfWeek = DayOfWeek.Sunday Then
- .Rows(j - 1).Cells(col).Style.BackColor = Color.LightSteelBlue
- End If
- d = d.AddDays(1)
- Next
- Next
- End With
- End Sub
- Private Sub AddRacesDates(ByVal nYear As Integer)
- 'Tabellenname in .mdb = tbl_SeasonRaces
- 'Feldbezeichnungen in Tabelle :
- 'R_No = Autoincrement (Lfd.Nr in der Tabelle)
- 'R_RaceDate = Date (Training-Quali oder Rennen eingeben)
- 'Race = Text (wo findet was statt)
- 'R_Day = Integer (was findet statt Training-Quali oder Rennen)
- Dim sDB As String = "D:\DotNet\Sample DotNet\sample DGV\Cal F1\Formula1.mdb"
- Dim sCon As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
- "Data Source=" & sDB & ";"
- Dim Cn As OleDb.OleDbConnection = New OleDb.OleDbConnection(sCon)
- Dim sSql As String = "SELECT R_RaceDate, R_No, race, R_Day"
- sSql &= " FROM tbl_SeasonRaces "
- sSql &= "WHERE R_RaceDate Is Not Null AND Format(R_RaceDate,'yyyy')=@RacesYear;"
- Dim Cmd As New OleDb.OleDbCommand(sSql, Cn)
- Cmd.Parameters.AddWithValue("@RacesYear", nYear)
- Cn.Open()
- Dim dr As OleDbDataReader = Cmd.ExecuteReader()
- While dr.Read()
- With DataGridView1
- For i As Integer = 1 To 12
- Dim d As Date = New Date(nYear, i, 1)
- For j As Integer = 1 To Date.DaysInMonth(nYear, i)
- Dim col As Integer = (i - 1)
- 'ist was zum Eintragen:
- If CDate(dr.Item(0)) = CDate(d) Then
- 'ja dann Text einfügen und Färben:
- 'Text eintragen
- Dim race As String = CStr(dr.Item(2).ToString)
- .Rows(j - 1).Cells(col).Value = race
- 'Färben nach : Training - Quali. oder Rennen
- Dim RDay As Integer
- RDay = CInt(dr.Item(3).ToString)
- Select Case RDay
- Case 1
- .Rows(j - 1).Cells(col).Style.BackColor = Color.Aquamarine
- Case 2
- .Rows(j - 1).Cells(col).Style.BackColor = Color.Gold
- Case 3
- .Rows(j - 1).Cells(col).Style.BackColor = Color.BurlyWood
- Case Else
- End Select
- End If
- d = d.AddDays(1)
- Next
- Next
- End With
- End While
- dr.Close()
- Cmd.Dispose()
- Cn.Close()
- End Sub
- Private Sub cboYear_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles cboYear.SelectedIndexChanged
- With DataGridView1
- .Rows.Clear()
- .Columns.Clear()
- .SuspendLayout()
- MakeHeader()
- MakeKalendar(CInt(cboYear.Text))
- AddRacesDates(CInt(cboYear.Text))
- .ResumeLayout()
- .AllowUserToAddRows = False
- End With
- End Sub
- Private Sub DataGridView1_CellClick(sender As Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellClick
- 'If DataGridView1.Rows(e.RowIndex).Cells(e.ColumnIndex).Value IsNot Nothing Then
- ' MessageBox.Show(DataGridView1.Rows(e.RowIndex).Cells(e.ColumnIndex).Value.ToString())
- 'End If
- End Sub
- Private Sub DataGridView1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellMouseEventArgs) Handles DataGridView1.CellMouseUp
- 'standard breite einstellen
- For Each c As DataGridViewColumn In DataGridView1.Columns
- c.Width = 40
- Next
- 'ändere breite wenn spalte gewählt wird
- If e.Button = Windows.Forms.MouseButtons.Left Then
- Dim hitRow As Integer, hitCol As Integer
- hitRow = e.RowIndex
- hitCol = e.ColumnIndex
- Dim column As DataGridViewColumn = DataGridView1.Columns(hitCol)
- column.Width = 120
- End If
- End Sub
- Private Sub DataGridView1_MouseLeave(sender As Object, e As System.EventArgs) Handles DataGridView1.MouseLeave
- 'standard breite einstellen
- For Each c As DataGridViewColumn In DataGridView1.Columns
- c.Width = 40
- Next
- End Sub
- Private Sub DataGridView1_CellPainting(sender As Object, e As System.Windows.Forms.DataGridViewCellPaintingEventArgs) Handles DataGridView1.CellPainting
- For Each row As DataGridViewRow In DataGridView1.Rows
- For Each cell As DataGridViewCell In row.Cells
- Dim value As String = Convert.ToString(cell.Value)
- If String.IsNullOrEmpty(value) Then
- cell.Style.BackColor = Color.Silver
- End If
- Next cell
- Next row
- End Sub
- End Class
der Code zeigt wie alles geladen wird, Insert, Update und Delete könnt Ihr selbst erweitern.
und hier noch ein Bild
Bild Tabelle in Datenbank
viel spaß damit
Gruss
kasi
*Spoiler wegen überlangem Code eingefügt*
Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Marcus Gräfe“ ()