Ich möchte mit einem Radio Button vom Bediener eine ja nein Antwort.
diese Antwort soll anschließend in einer Tabelle angezeigt werden
(nachdem ein button zur Bestätigung gedrückt wird). wie gehe ich vor?
Ausgangszustand: Tabelle erstellt, button und Radio Buttons erstellt.
wie kann ich die info per button in die Tabelle schreiben?
ich habe vor, das ganze mittels einer globalen Variablé, deren Wert
durch den Button verändert wird, zu realisieren und die Abfrage mittels
eines Events zu steuern. Mit welcher Methode kann ich den wert der Radio
Buttons in die Tabelle schreiben?
niemand? müsste ja eign soetwas sein wie
if radio box x == true
dann setze feld gleich string bla bla
und das feld setzen eben über globale variable und event
key schrieb:> cppbert schrieb:>> Weisst du nicht wie man ein Feld fuellt?>> ja das ist mein Problem
Und was fuer ein Feld ist das? Ein Edit oder Labelfeld?
Mehr Details bitte - es gibt tausend Dinge in der Programmiersprache
die du verwendest die Felder sind und auch x varianten von Tabellen -
keine Ahnung was du genau machst
cppbert schrieb:> key schrieb:>> cppbert schrieb:>>> Weisst du nicht wie man ein Feld fuellt?>>>> ja das ist mein Problem>> Und was fuer ein Feld ist das? Ein Edit oder Labelfeld?>> Mehr Details bitte - es gibt tausend Dinge in der Programmiersprache> die du verwendest die Felder sind und auch x varianten von Tabellen -> keine Ahnung was du genau machst
data grit view
habe alle spalten auf read only gestellt, d.h. es geht darum, das der
Bediener automatisiewrt Daten angezeigt bekommt.
key schrieb:> ich möchte die Klasse DataGridViewTextBoxColumn verwenden
das wahrscheinlkich schwachsinn, weil ich ja keine Daten einlesen
möchte. Sondern nur asugeben
2 grundsätzliche Dinge.
1. ) Wieso machst du das so umständlich. Für eine JA / NEIN Abfrage in
einer Tabelle reicht es, die Spalte der Tabelle mit einer Checked-Box
(die mit den Haken) zu versehen. Das Ergebnis wird als True/False
abgespeichert.
Ist im Datagridview nur eine richtige Einstellung.
2.) wenn du es unbedingt so machen willst lege 2 Radio-Button an.
Dann einfach beim Speichern die Checked-Eigenschaft abspeichern.
if radio_button_ja.checked = true then schreibe_in_tabelle$ = "ja" else
schreibe_in_tabelle$ = "nein"
Alternativ :
if radio_button_ja.checked = true then
datagridview.rows(Zeilen_nr).celles(Zeilen_nr).value = "ja"
else
datagridview.rows(Zeilen_nr).celles(Zeilen_nr).value ="nein"
end if
Kleiner Hinweis am Rande. Wenn du 2 Radio-buttons mit JA Stellung has,
must du die in eine Panel (Container) setzen, weil nur EIN Radio-Button
nach den ersten Klick auf der Form die Checked = True Eigenschaft hat.
Ein Container ist eine Mini-Form und muss auch so behandelt werden.
Sorry cells(Spalten_nr) natürlich : Also so ist der Code richtig
Alternativ :
if radio_button_ja.checked = true then
datagridview.rows(Zeilen_nr).cells(spalten_nr).value = "ja"
else
datagridview.rows(Zeilen_nr).cells(spalten_nr).value ="nein"
end if
Ich bin die Vorblendung von Variablen gewöhnt, da kommt so was halt vor.
;)
Kleiner Nebenhinweis.
Das Datagridview kannst du mit den richtigen Einstellungen so benutzen,
das man es nicht einmal sieht. Die Anbindung an eine Datenbank ist in
keinster Weise erforderlich.
Der Unterschied ist nur die Eigenschaft "Datapropertyname" im Entwurf.
Ist die leer ist das ein normales Gitter. Wenn sie ein Wert hat, muss
dieser Wert der Name des Feldes sein, mit den du per Befehl das
Datagridview füllst.
Ich benutze das Datagridview sehr oft, als formatierte Anzeige. Du must
nur ganz viele Standard-Eigenschaften verstellen. z.b. Header-text =
false etc.
Nun der Trick. Du musst die Farben auf den Hintergrund deiner Form
anpassen. Farbe von select_row nicht vergessen, und read_only auf TRUE
Gitterlinien abschalten, etc.
Dann merkt kein Mensch das da ein Datagridview hinter steckt.
Ist besonders geil, wenn du auf der Form z.B. eine Kalkulation anzeigen
willst. Einfach die Felder per gitter_ini_sub füllen. Und dann beim der
Berechnen_sub nur noch die Werte übergeben an die Zelle. Währungssymbole
und Formatierung macht das Grid für dich. Und es passt auch perfekt im
Design.
Ein Semikolon dahinter. ??
Dann muss du meine Befehle anpassen. Ich habe die Aussage getroffen,
weil ich dachte du hast Visual-Basic. In C sind da einige Dinge etwas
anders.
Ein Screenshot wird dir wenig helfen. Der Trick ist ja, das du das
Datagridview NICHT siehst.
Aber ich vermute dein Fehler liegt in der Gitter_ini_sub.
Die musst du schreiben mit folgenden VB !!! Befehlen und beim Start
aufrufen. Ich rufe so was immer im Form-Load Ereignis auf. (Doppelklick
in die nackte Form reicht).
Sub gitter_ini_sub
anzahl_der_zeilen = 24 ' oder was auch immer :)
Datagridview.Rows.Add(anzahl_der_zeilen)
end sub
Bitte beachte das die linke obere Zeile die Adresse 0, 0 hat.
Wenn das MS ist, dann drück die F1-Taste und such dann Datagridview und
dann die DataGridViewCell.Value Eigenschaft . Dort ist der Unterschied
in den Versionen (basic , c#, c++ u.s.w.) beschrieben
Hier ein Teil meine gitter_ini_sub
sub gitter_ini_sub
gg_summe.BackgroundColor = back_farbe
gg_summe.Rows.Add(8)
For i = 0 To 7
gg_summe.Rows(i).Height = 19
Next i
gg_summe.ColumnHeadersVisible = False ' schalte überschrift ab
gg_summe.CellBorderStyle = DataGridViewCellBorderStyle.None ' schaltet
gitterlinen ab
gg_summe.Rows(0).Cells(0).Value = "Listenpreis Abs. 1 :"
gg_summe.Rows(1).Cells(0).Value = "+ TZ :"
gg_summe.Rows(2).Cells(0).Value = "- Rabatte :"
gg_summe.Rows(3).Height = 2 ' fette Trennlinie
gg_summe.Rows(4).Cells(0).Value = "Endpreis ohne Mwst :"
gg_summe.Rows(5).Cells(0).Value = "+ " + Str(akt_mwst) + "% Mwst :"
gg_summe.Rows(6).Height = 2 ' fette Trennlinie
gg_summe.Rows(7).Cells(0).Value = "Endpreis inkl. Mwst :"
For i = 0 To 7 ' setze die summen_werte auf 0
gg_summe.Rows(i).Cells(1).Value = 0
gg_summe.Rows(i).Cells(4).Value = 0
Next i
'Skalierung des Gitters (ist so einfacher als mit den Eigenschaften
' diese Routine muss nach einen Neuskalieren in der
form_resize_eigenschaft
auch aufgerufen werden.
maxi = gg_summe.Width / 100
gg_summe.Columns(0).Width = maxi * 27
gg_summe.Columns(1).Width = maxi * 15
gg_summe.Columns(2).Width = maxi * 18
gg_summe.Columns(3).Width = maxi * 25
gg_summe.Columns(4).Width = maxi * 15
For i = 0 To 4 ' setzt die fette Line schwarz
If i <> 2 Then
gg_summe.Rows(3).Cells(i).Style.BackColor = Color.Black
gg_summe.Rows(6).Cells(i).Style.backColor = Color.Black
gg_summe.Rows(3).Cells(i).value = ""
gg_summe.Rows(6).Cells(i).value = ""
End If
Next i
'setzt die Standart-Eigenschaften der Farbe wegen Tarnung ;)
gg_summe.Rows(0).Cells(3).Value = "Listenpreis Angebot :"
gg_summe.DefaultCellStyle.ForeColor = Color.Black
gg_summe.DefaultCellStyle.BackColor = back_farbe 'Color.Black
Me.gg_summe.CurrentCell = Me.gg_summe(1, 0)
gg_summe.DefaultCellStyle.SelectionBackColor = back_farbe
So nun muss du das ganze nur noch in C umrechnen ;) Viel Spass
fein. Freut mich.
Musst halt selbst ein bisschen denken. Aber du hast den richtigen Weg.
Meine VB-Hilfe (MS-Hilfs-Assistent) zeigt mir die Code-Schnipsel der
Funktion in 4 verschiedene Prg-Sprachen an.
Mein größtes Problem ist nicht etwas zu coden. Sondern den Namen der
Eigenschaft des Objekt der Funktion zu wissen.
Deshalb hab ich dir den Code gezeigt. Ähnliche Ansteuerungen sind
nämlich in C unter VB zu finden. Ich lese bei der Suche nach einer
Funktion / Eigenschaft auch die VB.Net + C codes. War schon oft viel
brauchbares drin.
Die Details machen dich nur wahnsinnig. ;) Ich habe 4 Std. gestern an
einer einfachen Sinus-Funktionsberechnung gesessen. Bis ich
herausgefunden habe, das MS den Sinus in Radius nicht wie ich immer in
GRAD rechnet.
Da beißt du in die Tischkante
Schlaumaier schrieb:> Mein größtes Problem ist nicht etwas zu coden. Sondern den Namen der> Eigenschaft des Objekt der Funktion zu wissen.
dein Problem ist auch mein Problem!!!!!!!!! haha. Coden ist einfach,
eknn mich aber nicht mit c# oder Windows forms aus.
key schrieb:> es ist doch eine simple Frage: wie kann ich ein einzelnes Feld in einer> data grit view ansprechen/ deren Wert verändern?
Suchbegriff in den Ms-Hilfs-Assistent (Aufruf mit F1-Taste):
*DataGridView.Rows-Eigenschaft*
Auszug aus der MS-Hilfe.
Im folgenden Beispiel wird veranschaulicht, wie Zellwerte
programmgesteuert geändert werden.
[Visual Basic]
' Modify the value in the first cell of the second row.
Me.dataGridView1.Rows[1].Cells[0].Value = "new value"
' The previous line is equivalent to the following line.
Me.dataGridView1[0, 1].Value = "new value"
[C#]
// Modify the value in the first cell of the second row.
this.dataGridView1.Rows[1].Cells[0].Value = "new value";
// The previous line is equivalent to the following line.
this.dataGridView1[0, 1].Value = "new value";
me kann man sich aber sparen. This weiß ich nicht, da C#
Aber das geht nur, wenn du die Zeile vorher angelegt hast. !!!!!
Schlaumaier schrieb:> anzahl_der_zeilen = 24 ' oder was auch immer :)> Datagridview.Rows.Add(anzahl_der_zeilen)
da kannst du in Rows(x) x mit den Wert 0 - 23 hinterlegen.
eine Frage Dann doch noch:
die erste Spalte zählt wohl garnicht als spalte. Ich date da wäre
automatische die Zeilenzahl angeben. Wie kann ich das konfigurieren?
habe so versucht, meiner Tabelle spalten hinzuzufügen. Bekomme die
Fehlermeldung
System.ArgumentOutOfRangeException: "Die Anzahl der zu erstellenden
Kopien muss immer positiv sein.
setze RowHeadersVisible auf false
Ist eine Eigenschaft in der Eigenschaften-Liste.
Das ist sie weg und das Problem gelöst. Sieht eh Mist aus. ;)
Das ist keine Spalte sondern eine "Navi-Hilfe". Mach sie weg, und
navigiere mit ein dezenten Balken ;)
Die genauen Infos darüber sind in der Hilfe.
Kleiner Tipp :
Wenn du nochmal ein Prg. schreibst mit einen Datagridview mache
folgendes
Starte die IDE 2 x
Lade in IDE-1 dein Prg. mit den Grid
Klicke das Grid an, und dann STRG-C (kopieren)
Wechsel in IDE-2 mit den neuen Prg.
klicke auf die Form wo das Teil hin soll
STRG-V (einfügen).
Dann rechte maus auf das Grid, spalten bearbeiten, und fertig ist das
neue Grid im neuen Programm.
ALLE eingestellten (nicht programmierten) Eigenschaften werde durch das
kopieren mit übernommen. So vergisst du nicht irgend eine Eigenschaft
zu ändern ;)
Ich bin faul, und merkte mir keine 100 Eigenschaften von so ein plöden
Grid.
Wenn du Zeilen-Nr. haben willst, machst du folgendes.
Setzte die erste Spalte fix, und füttere sie mit einer schleife.
For i = 0 to datagridview.Rows.Count - 1
datagridview.rows(i).cells(0).value = i
next i
datagridview.Rows(0).ReadOnly = True ' oder in den Eigenschaften der
Spalte setzen
Schlaumeier 2 schrieb:> Anz_neuer_zeilen = 2> DataGridview.rows.add (anzahl_neuer_zeilen)>> Das ist alles
super. jetzt läuft alles. <vielen <dank für Ihre Hilfe Sir. Eine letzte
Frage: wenn ich hunderte Zeilen in der Tabelle eingefügt habe, wie kann
ich einstellen, dass immer die zuletzt hinzugefügte Zeile angezeigt
wird. und nicht die erste, sodass man immer scrollen muss....
Sorry war im Krankenhaus wegen Herzen :(
Hier des Code-Schnipsel. Beachte die letzte Zeile.
DataGridView.Rows.Add(100) ' 100 neue Zeilen
For i = 1 To DataGridView.Rows.Count - 1 ' schleife füllt damit du
die Zeilen zählen kannst
DataGridView.Rows(i).Cells(1).Value = i
Next i
DataGridView.FirstDisplayedCell = DataGridView.Rows(gg.Rows.Count -
1).Cells(0) <- Springt zur ersten ZELLE in Zeile 100 und zeigt die an.
Die Angabe muss so erfolgen, da du auch nach links/rechts positionieren
musst/kannst. Bei 50 Spalten merkst du den Vorteil ;)
Sorry kann nicht editieren. Kleiner feiner Tippfehler im Code. Hier der
richtige.
DataGridView.Rows.Add(100) ' 100 neue Zeilen
For i = 1 To DataGridView.Rows.Count - 1 ' schleife füllt damit du
die Zeilen zählen kannst
DataGridView.Rows(i).Cells(1).Value = i
Next i
DataGridView.FirstDisplayedCell =
DataGridView.Rows(DataGridView.Rows.Count -
1).Cells(0) ' <- Springt zur ersten ZELLE in Zeile 100 und zeigt die
an.
Die Angabe muss so erfolgen, da du auch nach links/rechts positionieren
musst/kannst. Bei 50 Spalten merkst du den Vorteil ;)