DataGridView in VB.Net

Fragen zu allen anderen Programmiersprachen.
Benutzeravatar
Pure_Beginner
Beiträge: 247
Registriert: 29.09.2011 21:49
Computerausstattung: i7 9XX 4000 MHZ / 12 GB RAM / Win 8.1 64Bit / Win 7 64Bit
Wohnort: Brühl

DataGridView in VB.Net

Beitrag von Pure_Beginner »

Hallo zusammen,

heute mal ein etwas ungewöhnliches Problem.
Poste hier weil man es in andern Foren anscheinend nicht Lösen kann. :freak:

Eine Frage zu DataGridView's.

Habe folgendes Sub geschrieben und möcht das DataGridView von DataGridView1 bis DataGridView12 um je 1 erhöhen,
bin aber nicht sicher wie ?.

Hier mein Code:

Code: Alles auswählen

 Private Sub Erzeugen(jahr As Integer)
        Dim d As Date
        Dim i As Integer, m As Integer
        Dim s As String
        Dim Tage_im_Monat(12) As Integer
        Tage_im_Monat(1) = 31
        Tage_im_Monat(2) = Schaltjahr(jahr)
        Tage_im_Monat(2) = 31
        Tage_im_Monat(4) = 30
        Tage_im_Monat(5) = 31
        Tage_im_Monat(6) = 30
        Tage_im_Monat(7) = 31
        Tage_im_Monat(8) = 31
        Tage_im_Monat(9) = 30
        Tage_im_Monat(10) = 31
        Tage_im_Monat(11) = 30
        Tage_im_Monat(12) = 31

        For m = 1 To 12 Step 1
            For i = 1 To Tage_im_Monat(m) Step 1
                s = CStr(i) + "/" + "1" + "/" + CStr(jahr)
                Console.WriteLine(s)
                d = CDate(s)
                DataGridView1.Rows.Add(d.ToString("ddd", New CultureInfo("de-DE")), CStr(i))
            Next
        Next
    End Sub
Dabei geht es um die Zeile

Code: Alles auswählen

DataGridView1.Rows.Add(d.ToString("ddd", New CultureInfo("de-DE")), CStr(i))
DataGridView sollte in der For Schleife immer den Wert m annehmen.

für eure Hilfe wäre ich dankbar.

Grüße
Christian
PureBasic 5.30 Beta 3 (X64/X86) | Win 8 (64) Pro / Win 7 (64) Pro | Es ist der Hobbyist[/col
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: DataGridView in VB.Net

Beitrag von Kiffi »

ich würde eine DataTable als Datenquelle verwenden. Und Date.DaysInMonth() liefert
Dir die Anzahl der Tage des jeweiligen Monats zurück:

Code: Alles auswählen

Private Sub Erzeugen(Jahr As Integer)

	Dim myDataTable As New DataTable

	myDataTable.Columns.Add("Jahr")
	myDataTable.Columns.Add("Monat")
	myDataTable.Columns.Add("TageImMonat")

	For Monat As Integer = 1 To 12
		Dim myDataRow As DataRow = myDataTable.NewRow
		myDataRow("Jahr") = Jahr
		myDataRow("Monat") = Monat
		myDataRow("TageImMonat") = Date.DaysInMonth(Jahr, Monat)
		myDataTable.Rows.Add(myDataRow)
	Next

	DataGridView1.DataSource = myDataTable

End Sub
Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
Pure_Beginner
Beiträge: 247
Registriert: 29.09.2011 21:49
Computerausstattung: i7 9XX 4000 MHZ / 12 GB RAM / Win 8.1 64Bit / Win 7 64Bit
Wohnort: Brühl

Re: DataGridView in VB.Net

Beitrag von Pure_Beginner »

@Kiffi

Danke für deine schnelle Antwort,
leider funktioniert der Code nicht.

Nur der erste Monat(Gridview1) wird mit einem Grid gefüllt aber ohne Nummerierung und Wochentage.

Grüße
Christian


Nachtrag:

brauche ich nicht zwei Schleifen ?

eine für Anzahl der Tage und eine für Anzahl der Monate ?
PureBasic 5.30 Beta 3 (X64/X86) | Win 8 (64) Pro / Win 7 (64) Pro | Es ist der Hobbyist[/col
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: DataGridView in VB.Net

Beitrag von Kiffi »

Pure_Beginner hat geschrieben:leider funktioniert der Code nicht.
ähm, mein Code funktioniert. Kann sein, dass er nicht
das macht, was Du möchtest. ;-)

Bild
Pure_Beginner hat geschrieben:Nur der erste Monat(Gridview1) wird mit einem Grid gefüllt aber ohne Nummerierung und Wochentage.
verstehe ich nicht. Kannst Du mir mal 'aufmalen', was Du genau meinst?

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
Pure_Beginner
Beiträge: 247
Registriert: 29.09.2011 21:49
Computerausstattung: i7 9XX 4000 MHZ / 12 GB RAM / Win 8.1 64Bit / Win 7 64Bit
Wohnort: Brühl

Re: DataGridView in VB.Net

Beitrag von Pure_Beginner »

@Kiffi

habs leider nicht so mit dem Malen, obwohl ich den ganzenTag mit CAD zubringe :lol:

werde versuchen es zu beschreiben

es gibt ein TAB Contol mit 12 einträgen für jeden Monat eins
auf jedem TAB befindet sich ein DataGridView, auf TAB1 DataGridView1, auf TAB2 DataGridView2 usw....
ich möchte nach und nach jedes DataGridView von 1 bis 12 mit Wochentagen und Zahlen (Anzahl der Tage) füllen.
Weis aber Leider nicht wie ich

Code: Alles auswählen

DataGridView1.Rows.Add(d.ToString("ddd", New CultureInfo("de-DE")), CStr(i))
hochzählen soll, damit daraus

Code: Alles auswählen

DataGridView2.Rows.Add(d.ToString("ddd", New CultureInfo("de-DE")), CStr(i))

Code: Alles auswählen

DataGridView3.Rows.Add(d.ToString("ddd", New CultureInfo("de-DE")), CStr(i))
usw. wird

Grüße
PureBasic 5.30 Beta 3 (X64/X86) | Win 8 (64) Pro / Win 7 (64) Pro | Es ist der Hobbyist[/col
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: DataGridView in VB.Net

Beitrag von Kiffi »

achso, dann musst Du vorher ein Array mit den Grids befüllen:

Code: Alles auswählen

Dim myGridArray(12) As DataGridView

myGridArray(1) = DataGridView1
myGridArray(2) = DataGridView2
' und so weiter
und danach über die Monate iterieren:

Code: Alles auswählen

myGridArray(Monat).Rows.Add(d.ToString("ddd", New CultureInfo("de-DE")), CStr(i))
Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
Pure_Beginner
Beiträge: 247
Registriert: 29.09.2011 21:49
Computerausstattung: i7 9XX 4000 MHZ / 12 GB RAM / Win 8.1 64Bit / Win 7 64Bit
Wohnort: Brühl

Re: DataGridView in VB.Net

Beitrag von Pure_Beginner »

@Kiffi

funktioniert super,
hab leider noch einen Fehler in meinem Code den ich nicht finde >_<
beim zweiten Monat meckert er den 29 Februar an wenn ich das Programm starte (2013 kein Schaltjahr).
obwohl er sich den Wert Tage_im_Monat(2) = 28
aus dem ARRAY holen sollte.

was hab ich nur Übersehen ? :(


Code: Alles auswählen

Private Sub Erzeugen(jahr As Integer)
        Dim d As Date
        Dim i As Integer, m As Integer
        Dim s As String
        Dim Tage_im_Monat(12) As Integer
        Tage_im_Monat(1) = 31
        Tage_im_Monat(2) = 28
        Tage_im_Monat(2) = 31
        Tage_im_Monat(4) = 30
        Tage_im_Monat(5) = 31
        Tage_im_Monat(6) = 30
        Tage_im_Monat(7) = 31
        Tage_im_Monat(8) = 31
        Tage_im_Monat(9) = 30
        Tage_im_Monat(10) = 31
        Tage_im_Monat(11) = 30
        Tage_im_Monat(12) = 31

        Dim myGridArray(12) As DataGridView
        myGridArray(1) = DataGridView1
        myGridArray(2) = DataGridView2
        myGridArray(3) = DataGridView3
        myGridArray(4) = DataGridView4
        myGridArray(5) = DataGridView5
        myGridArray(6) = DataGridView6
        myGridArray(7) = DataGridView7
        myGridArray(8) = DataGridView8
        myGridArray(9) = DataGridView9
        myGridArray(10) = DataGridView10
        myGridArray(11) = DataGridView11
        myGridArray(12) = DataGridView12

        For m = 1 To 12 Step 1
            For i = 1 To Tage_im_Monat(m) Step 1
                s = CStr(i) + "/" + CStr(m) + "/" + CStr(jahr)
                d = CDate(s)
                myGridArray(m).Rows.Add(d.ToString("ddd", New CultureInfo("de-DE")), CStr(i))
            Next
        Next
    End Sub
PureBasic 5.30 Beta 3 (X64/X86) | Win 8 (64) Pro / Win 7 (64) Pro | Es ist der Hobbyist[/col
Benutzeravatar
Pure_Beginner
Beiträge: 247
Registriert: 29.09.2011 21:49
Computerausstattung: i7 9XX 4000 MHZ / 12 GB RAM / Win 8.1 64Bit / Win 7 64Bit
Wohnort: Brühl

Re: DataGridView in VB.Net

Beitrag von Pure_Beginner »

in selbst drauf gekommen

Code: Alles auswählen

Dim Tage_im_Monat(12) As Integer
        Tage_im_Monat(1) = 31
        Tage_im_Monat(2) = 28
        Tage_im_Monat(2) = 31
        Tage_im_Monat(4) = 30
hab 2 mal Tage_im_Monat(2) angegeben.

Wie Blöd :oops:

nochmals besten Dank
Christian
PureBasic 5.30 Beta 3 (X64/X86) | Win 8 (64) Pro / Win 7 (64) Pro | Es ist der Hobbyist[/col
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: DataGridView in VB.Net

Beitrag von Kiffi »

Pure_Beginner hat geschrieben:hab 2 mal Tage_im_Monat(2) angegeben.
japp :-)

Nochmals: es gibt ein Date.DaysInMonth(). Dann brauchst Du auch kein Tage_im_Monat()-Array.

Code: Alles auswählen

Private Sub Erzeugen(jahr As Integer)

	Dim d As Date
	Dim i As Integer, m As Integer
	Dim s As String

	Dim myGridArray(12) As DataGridView
	myGridArray(1) = DataGridView1
	myGridArray(2) = DataGridView2
	myGridArray(3) = DataGridView3
	myGridArray(4) = DataGridView4
	myGridArray(5) = DataGridView5
	myGridArray(6) = DataGridView6
	myGridArray(7) = DataGridView7
	myGridArray(8) = DataGridView8
	myGridArray(9) = DataGridView9
	myGridArray(10) = DataGridView10
	myGridArray(11) = DataGridView11
	myGridArray(12) = DataGridView12

	For m = 1 To 12
		For i = 1 To Date.DaysInMonth(jahr, m)
			s = CStr(i) + "/" + CStr(m) + "/" + CStr(jahr)
			d = CDate(s)
			myGridArray(m).Rows.Add(d.ToString("ddd", New CultureInfo("de-DE")), CStr(i))
		Next
	Next

End Sub
Step 1 brauchst Du übrigens auch nicht immer anzugeben.

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
Pure_Beginner
Beiträge: 247
Registriert: 29.09.2011 21:49
Computerausstattung: i7 9XX 4000 MHZ / 12 GB RAM / Win 8.1 64Bit / Win 7 64Bit
Wohnort: Brühl

Re: DataGridView in VB.Net

Beitrag von Pure_Beginner »

@Kiffi

super Tipp das mit Date.DaysInMonth().

Wo kann ich sowas finden, alle Bücher die man kauft sind nur damit beschäftigt OOP und Schleifen usw. zu erklären,
ein richtiges Verzeichnis aller Befehle habe ich noch nicht gefunden.
hast du einen Tipp ?

Grüße
Christian
PureBasic 5.30 Beta 3 (X64/X86) | Win 8 (64) Pro / Win 7 (64) Pro | Es ist der Hobbyist[/col
Antworten