Announcement

Collapse
No announcement yet.

Daten aus Textbox in neue Zeile eines Datagridviews

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Daten aus Textbox in neue Zeile eines Datagridviews

    Hallo!

    Ich hab mir die Augen schon wundgeschaut in der Suche, wurde aber nicht fündig. Ich möchte Daten aus Textboxen in eine neue Zeile eines Datagridviews reinschreiben und hab es versucht mit:

    Dim Buchungen As New DataTable
    Dim RowBuchungen As DataRow
    Dim Spalten as DataColumn

    Spalten = Buchungen.Columns.Add("Kunden")
    Spalten = Buchungen.Columns.Add("Zimmer")
    Spalten = Buchungen.Columns.Add("Übernachtungen")

    RowBuchungen = Buchungen.NewRow

    RowBuchungen(0) = txtKunde.Text
    RowBuchungen(1) = txtZimmer.Text
    RowBuchungen(2) = txtUebernachtungen.Text

    Buchungen.Rows.Add(RowBuchungen)
    dgvBuchung.DataSource = Buchungen

    Der Kunde wird aber nicht ins Datagridview geschrieben (Zimmer und Übernachtungen schon) und die alte Spalte wird überschrieben, statt daß die Daten in eine neue Zeile geschrieben werden.


    Kann mir jemand helfen?
    Vielen Dank im voraus!
    Falbala
    Zuletzt editiert von Falbala; 27.03.2009, 20:32.

  • #2
    Hallo und willkommen im Forum!

    Hier eine von sicherlich 1000 Lösungen, wie man das ganze Lösen kann:
    [highlight=vbnet]
    Dim myRow As New DataGridViewRow()
    myRow.CreateCells(dataGridView1)
    myRow.SetValues(New Object() {txtKunde.Text, txtZimmer.Text, txtUebernachtungen.Text})
    dataGridView1.Rows.Add(myRow)
    [/highlight]

    Mfg,
    Myst
    Zuletzt editiert von Myst; 28.03.2009, 01:09.

    Comment


    • #3
      Hallo und ebenfalls willkommen,

      ich kann auch keinen Fehler erkennen. Du benutzt vor allem NewRow und Rows.Add, also sollte es korrekt sein.

      Ich schlage vor, noch DataRow.BeginEdit() + EndEdit() einzufügen. Das wird zwar eigentlich implizit ausgeführt, ich benutze es sicherheitshalber immer explizit.

      @Myst
      Von deinem Verfahren ist dringend abzuraten! Die Daten gehören in die Datenmenge, also die DataTable. Das DataGridView dient, wie schon der Name sagt, zur Anzeige von Daten in einem Grid und nicht zur Bearbeitung der Daten per Code; das ist wirklich mit den Klassen von System.Data (und ggf. dem typisierten DataSet) zu erledigen.

      Noch ein paar Randbemerkungen:

      Seltsam empfinde ich, dass anscheinend alle Spalten als Strings verwendet werden. Zumindest bei den "Übernachtungen" hätte ich eher int erwartet; dann sollte statt der direkten Zuordnung int.TryParse eingesetzt werden (aber das nur nebenbei, unabhängig vom Problem).

      Die DataSource kann auch generell zugewiesen werden, z.B. im FormLoad - unabhängig von neuen Zeilen.

      Die Variable Spalten ist nicht notwendig; Columns.Add kann auch wie eine void-Methode benutzt werden.

      Ich empfehle, ausschließlich englische Bezeichner zu verwenden. RowBuchungen ist m.E. schlimmer denglischer Mischmasch.

      Ich hoffe, du findest die Lösung. Jürgen

      Comment


      • #4
        Guten Tag allerseits.

        Danke für den Tipp. Ich muss gestehen, dass ich mich mit DataGridViews \ DataTables etc. noch nie sonderlich befasst habe, daher dachte ich, dass, wenn man ein DGV verändert, automatisch das zugrunde liegende DataSet verändert?

        Der Fehler im Code von Falbala ist der, dass jedesmal eine neue Instanz einer DataTable erstellt wird, die dann als Source für das DGV verwendet wird.

        Man könnte das DataSet als privates Feld der Klasse deklarieren und bspw. im Konstruktor instanziieren und einrichten (DataSource, Columns).

        Beispielcode:

        [highlight=vbnet]
        Public Class Form1

        Dim Buchungen As DataTable

        Public Sub New()

        InitializeComponent()
        Buchungen = New DataTable()
        dgvBuchung.DataSource = Buchungen
        Buchungen.Columns.Add("Kunden")
        Buchungen.Columns.Add("Zimmer")
        Buchungen.Columns.Add("Übernachtungen")

        End Sub

        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim RowBuchungen As DataRow

        RowBuchungen = Buchungen.NewRow

        RowBuchungen(0) = txbKunde.Text
        RowBuchungen(1) = txbZimmer.Text
        RowBuchungen(2) = txbUebernachtungen.Text

        Buchungen.Rows.Add(RowBuchungen)

        End Sub

        End Class
        [/highlight]

        Warum kein Kunde im Code von Falbala eingetragen wird, ist nicht ersichtlich.

        Mfg,
        Myst
        Zuletzt editiert von Myst; 28.03.2009, 15:51. Reason: Syntax Highlighting vergessen ..

        Comment


        • #5
          Originally posted by Myst View Post
          daher dachte ich, dass, wenn man ein DGV verändert, automatisch das zugrunde liegende DataSet verändert?
          Nein, genau umgekehrt wird ein Schuh daraus. Die DataSource ist (per Code) zu verändern, und das wird dann direkt im DataGridView angezeigt.

          Originally posted by Myst View Post
          Der Fehler im Code von Falbala ist der, dass jedesmal eine neue Instanz einer DataTable erstellt wird, die dann als Source für das DGV verwendet wird.
          Naja, er hat den Code nicht richtig formatiert. Ich hoffte deshalb, dass er hier nur die relevanten Teile zusammenkopiert hat, aber in seinem eigentlichen Code die Teile genauso strukturiert hat wie du. Wenn er tatsächlich bei jeder neuen Zeile die DataTable neu erstellen würde, das wäre natürlich [durchgestrichen]hirnrissig[/durchgestrichen] völlig abwegig.

          Jürgen

          Comment

          Working...
          X