Announcement

Collapse
No announcement yet.

Fragen BindingNavigator & BindingSource

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

  • Fragen BindingNavigator & BindingSource

    Hallo zusammen,

    ich beschäftige mich zum erstenmal mit dem BindingNavigator und BindingSources und habe dazu ein paar Verständigungsfragen.

    Ich habe eine einfache Tabelle die so aussieht.

    CREATE TABLE [dbo].[tblName](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [CustomerID] [int] NOT NULL,
    [Name] [nvarchar](max) NOT NULL
    ) ON [PRIMARY]

    Ich habe in meinem C# (VSS2005) jetzt ein DataSet eingefügt und diese Tabelle in das DatSet eingefügt.

    Eine BindingSource-Komponente bindet jetzt diese Tabelle an den BindingNavigator. Die einzelnen Datenbankfelder werden als Textboxen auf meinem Form angezeigt. Das klappt auch soweit ganz gut. Ich kann in den Datensätzen navigieren. Alles super.

    Die Probleme entstehen beim Einfügen, Ändern und Löschen von Daten.

    Ich muss dazu noch sagen, dass das Feld CompanyID für den Benutzer nur ReadOnly ist.

    Wenn ich jetzt den Button "AddNewItem" drücke kann ich auch neue Daten eingeben, wenn ich aber das z.B. zum vorherigen Datensatz wechsele, dann kommt eine Exception, dass das Feld Company ID nicht null sein darf.

    Wie kann ich das Feld ausfüllen?
    Muss ich auf das OnClick Ereigniss reagieren und den Datensatz selbst einfügen ?

    Wie füge ich über die BindingSource ein neues Element in meine Tabelle ein und wie mache ich das Update der Tabelle zur Datenbank?

    Vielleicht kann mir jemand ein wenig Licht in diesen Dschungel bringen.

    Gruß
    Jörg

  • #2
    Hallo,

    in der Datenbanktabelle wurde die Spalte CustomerID als NOT NULL deklariert, so dass für das Einfügen eines neuen Datensatzes ein Wert zwingend erforderlich ist.

    Wie kann ich das Feld ausfüllen?
    Eine Vorbelegung wäre über den folgenden Weg möglich:
    1. Ereignisbehandlungsmethode für das Click-Ereignis des bindingNavigatorAddNewItem-Buttons im BindingNavigator anlegen.
    2. Wenn der BindingNavigator das Click-Ereignis auslöst, hat der bereits die Methode AddNew der BindingSource-Komponente aufgerufen, so dass die BindingSource-Eigenschaft Current auf den neuen Datensatz zeigt.
    3. Nachdem die Spaltenwerte gefüllt wurden, muss die BindingSource-Methode ResetCurrentItem aufgerufen werden, damit die gesetzten Werte auch sofort in der Benutzeroberfläche dargestellt werden


    Code:
    private void bindingNavigatorAddNewItem_Click(object sender, EventArgs e)
    {
         DataRowView aDRV = (DataRowView)this.testTblBindingSource.Current;
         DataSet1.TestTblRow aNewRow = (DataSet1.TestTblRow)aDRV.Row;
         aNewRow.wert = "(bitte ausfüllen)";
         aNewRow.datum = DateTime.Today;
         this.testTblBindingSource.ResetCurrentItem();
    }

    Comment


    • #3
      Hallo zusammen,

      ich habe eine neue Frage zu diesem Thema.

      Meine Datenbanktabelle wird über den Bindingnavigator an entsprechende Textboxen gebunden.
      Wenn ich jetzt einen neuen Datensatz anlege (NewItem-Button des BindingNavigators), dann kann ich auch ganz normal meine Daten eingeben.

      Wenn ich das letzte Feld eingegeben habe (Feld hat weiterhin den Eingabeprompt) drücke ich den Speichern-Button (ebenfalls vom BindingNavigator). Alle Daten werden gespeichert, bis auf die Daten des letzten Feldes, bei diesem Feld wird die Eingabe gelöscht.

      Warum?

      Wenn ich die Eingabe im fehlenden Feld wiederhole, dann in anderes Feld springe und den Datensatz dann erneut speichere, werden die Daten gespeichert.

      Kann mir jemand dieses Verhalten erklären?
      Ich kann ich das Problem lösen?

      Viele Grüße
      Jörg

      Comment


      • #4
        Dieses Problem habe ich noch nicht selbst genau untersucht. In verschiedenen Beiträgen wurde auf BindingSource.EndEdit hingewiesen. Wenn dies nicht direkt hilft, dann suche einmal Beiträge von Andreas Kosch mit diesem Stichwort; nach meiner Erinnerung hat er ausführliche Hilfen mit Erläuterung gebracht.

        Gruß Jürgen

        Comment


        • #5
          Hallo Jürgen,

          danke für den Tipp. Genau das war das Problem. Nachdem ich EndEdit aufgerufen habe, funktioniert das Speichern fehlerfrei.

          Danke für die Hilfe.

          Gruß
          Jörg

          Comment

          Working...
          X