Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Auto_Increment in DataGridView zählt weiter obwohl kein Datensatz erstellt wurde
MChief
myCSharp.de - Member



Dabei seit:
Beiträge: 11

Themenstarter:

Auto_Increment in DataGridView zählt weiter obwohl kein Datensatz erstellt wurde

beantworten | zitieren | melden

Guten Tag,

bin noch ziemlich unerfahren in C# mit Visual Studio 2005.
Bin im Moment dabei ein Lizenzveraltungsprogramm zu erstellen.
Im Hintergrund läuft ein SQL Server, in dem die nötigen Tabellen stehen.
Jede Tabelle hat einen Primärschlüssel, der unveränderbar ist und automatisch hochzählt.
Ich habe über die Datenquellen Ansicht eine Tabelle in eine Windows Form eingefügt.
Es wurde automatisch eine Tabelle und eine Leiste erstellt.

Nun mein Problem:
In der Tabelle steht ein Probedatensatz.
Wenn ich nun einen neuen Datensatz erstellen will, zählt der PS automatisch hoch.
So ist alles ok. Aber wenn ich den Datensatz verlasse (nicht erstellt!) und wieder einen neuen erstellen will, ist der PS wieder eins höher (also statt 2 eine 3) obwohl ich ja keinen mit der 2 erstellt habe. Dies geht immer so weiter.

Bilder dazu im Anhang

Wie bekomme ich es hin, dass er immer wieder beim kleinsten nicht benutzten Wert anfängt?

Gruß
MChief
Dieser Beitrag wurde 3 mal editiert, zum letzten Mal von MChief am .
Attachments
private Nachricht | Beiträge des Benutzers
GMLOD
myCSharp.de - Member

Avatar #avatar-2654.jpg


Dabei seit:
Beiträge: 1.200

beantworten | zitieren | melden

Du arbeitest wohl mit DataSets/DataTables, oder?

Ruf beim Verlassen ohne zu Speichern für die entsprechende DataRow mal die RejectChanges Methode auf. Wenn das nicht funktioniert, musst du wohl manuell den Start zurücksetzen.
Shift to the left, shift to the right!
Pop up, push down, byte, byte, byte!

YARRRRRR!
private Nachricht | Beiträge des Benutzers
MChief
myCSharp.de - Member



Dabei seit:
Beiträge: 11

Themenstarter:

beantworten | zitieren | melden

Dnake werde ich gleich mal ausprobieren.
Hier noch das zweite Bild, da ja [ img ] nicht gewollt ist^^
Attachments
private Nachricht | Beiträge des Benutzers
Generalissimo
myCSharp.de - Member



Dabei seit:
Beiträge: 131
Herkunft: Sachsen

beantworten | zitieren | melden

hi,

das verhalten ist eigentlich schon so korrekt. wird ein autoincrement schlüssel von der db abgerufen, steht dieser nie wieder zur verfügung. dabei ist es egal, ob er verwendet wird oder ob der eintrag nicht gespeichert wird. das muss so sein. stell dir mal vor, mehrere benutzer legen gleichzeitig ein datensatz an. würden alle die 2 bekommen, gewinnt am ende der, welcher als erstes speichert. das darf ja nicht sein. ist ne sicherheitsfunktion.

was hier noch nicht richtig läuft, ist das feedback der db. stelle mal in deinem dataset das autoincrement auf negative werte. diese werden dann bei einem speichern in der db (update mittels dbadapter) automatisch richtig vergeben.
private Nachricht | Beiträge des Benutzers
MChief
myCSharp.de - Member



Dabei seit:
Beiträge: 11

Themenstarter:

beantworten | zitieren | melden

hmm also das habe ich mir aus Google Ergebnissen zusammengebastellt:

LizenzverwaltungDataSetErweiterung ds = new LizenzverwaltungDataSetErweiterung();
            ds.RejectChanges();

Lizenzverwaltung = Datenbank
Erweiterung = Tabelle

habe diesen Code nun nacheinander in RowLeave, RowRemoved und Zurücksetzen_Click(Button) eingesetzt, aber das einzige was sich ändert ist, dass er aus der zweiten Zeile in die Erste springt.

Mache ich etwas falsch?

Gruß
MChief

edit: habe den neuen Post gesehen und werde dies auch mal testen.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von MChief am .
private Nachricht | Beiträge des Benutzers
ErfinderDesRades
myCSharp.de - Experte

Avatar #avatar-3151.jpg


Dabei seit:
Beiträge: 5.299

beantworten | zitieren | melden

Hi!

Du kannst mal gucken, obde mit "Datenbank in 10 Minuten" auf Movie-Tuts klarkommst.

Was Generalissimo sagt, wundert mich - nach meiner Erfahrung geht das Updaten per dbAdapter nur bei client-seitiger Primkey-Generierung problemlos.
Aber werdich nochmal ausprobieren.
Der frühe Apfel fängt den Wurm.
private Nachricht | Beiträge des Benutzers
MChief
myCSharp.de - Member



Dabei seit:
Beiträge: 11

Themenstarter:

beantworten | zitieren | melden

Danke erstmal für alle Antworten

Problem ist dank ErfinderDesRades denk ich mal gelöst. Habe mir das Tutorial angeguckt und da wird genau mein Problem behandelt. Muss es noch bei meinem Projekt ausprobieren.

Gebe dann Bescheid, ob das Thema geschlossen werden kann.

Gruß MChief
private Nachricht | Beiträge des Benutzers
MChief
myCSharp.de - Member



Dabei seit:
Beiträge: 11

Themenstarter:

beantworten | zitieren | melden

So hab es nach dem Tutorial gemacht (war nicht so einfach, da es da in VB gemacht wird^^)
Nun habe ich in der DataSet.cs ein Event "Initialised" mit

private void LizenzverwaltungDataSetComputer_Initialized(object sender, System.EventArgs e)
        {
            this.Computer_Verwaltung.NummerColumn.AutoIncrement = true;
        }
NummerColumn ist mein PS
in der SQL Datenbank ist auto_increment ausgeschaltet und im Programm auch. Es sollte damit wieder aktiviert werden, wenn die Daten geladen werden.
Dies ist aber nicht der Fall. Ich bekomme nicht wie vorher eine Zahl vorgegeben, sondern kann sogar selber eine festlegen, was aber nicht Sinn der Sache ist.

Werde noch etwas rumprobieren, aber es ist genau wie im Tutorial, nur es geht nicht...

Gruß
MChief

Edit: Habe gerade mal das fertige Projekt von dem Tutorial ausgeführt und die haben den gleichen Fehler, wie ich die ganze Zeit.... Also hat das nix gebracht. Alles umsonst.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von MChief am .
private Nachricht | Beiträge des Benutzers
MChief
myCSharp.de - Member



Dabei seit:
Beiträge: 11

Themenstarter:

beantworten | zitieren | melden

Ok, habe das Problem halbwegs gelöst.
Es wird zwar immernoch hochgezählt, ohne dass ein Datensatz erstellt wurde,
aber es wird richtig in der Datenbank gespeichert!!!!
Habe nun die Nummer Spalte unsichtbar gemacht.
Und nun sieht es für den Anwender aus es würde alles funktionieren.

Also falls keiner noch ein richtige Lösung hat, kann das Thema geschlossen werden.

Gruß
MChief
private Nachricht | Beiträge des Benutzers
ErfinderDesRades
myCSharp.de - Experte

Avatar #avatar-3151.jpg


Dabei seit:
Beiträge: 5.299

beantworten | zitieren | melden

Äh, das ist die richtige Lösung, jedenfalls eine mögliche, nämlich eine mit clientseitiger Primkey-Generierung.
Natürlich werden die Schlüsselspalten vorm Anwender verborgen, das sind Datenverarbeitungs-Interna, die ihn nix angehen, wo er nur Blödsinn mit machen könnte.
Anforderung an eine Primkey-Generierung ist nicht, dass fortlaufende Nummern erzeugt werden, sondern nur, daß sich die Nummern nicht wiederholen.
Für Multiuser-Datenbanken müsste man dann System.Guid als Datentyp der Schlüsselspalten nehmen, jedenfalls bei clientseitiger Primkey-Generierung.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von ErfinderDesRades am .
Der frühe Apfel fängt den Wurm.
private Nachricht | Beiträge des Benutzers