Standardwert String.Empty Feld im DGV löschen

  • VB.NET
  • .NET 4.5

SSL ist deaktiviert! Aktivieren Sie SSL für diese Sitzung, um eine sichere Verbindung herzustellen.

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Standardwert String.Empty Feld im DGV löschen

    Hallo,

    ich habe gemäß @ErfinderDesRades Styleguide für Datasets für alle Felder AllowDBNull auf false gestellt und mit passenden DefaultValues gearbeitet. Im Fall eines Strings ist das "String.Empty" oder einfach gar nichts in dem entsprechenden Feld im DataSet Designer. Funktioniert prima, binden an ein DataGridView, Daten editieren, auch mit Einladen/Speichern aus/in eine XML Datei.

    Aber, wenn ich einmal was mit einem DGV in so ein Feld eingegeben habe, bekomme ich das nicht mehr weg. Also Zeichenfolge im DGV löschen und Enter drücken, schon ist der alte Wert wieder drin.
    Was mache ich da falsch?

    Viele Grüße,
    Oliver
    hängt vlt. mit der DbNullValue-Property der Dgv-Spalte zusammen.
    Wenn die auf "" steht, dann trägt er DbNull ein, wenn du einen Leerstring eingibst.
    Aber das müsste einen Fehler geben, weil du DbNull ja nicht zulässt. Wieso er dann da etwas vorheriges wieder einträgt weissich auch nicht.
    Hast du mal eine Sample-Solution?
    Aber Obacht! ich hab nur vs2013, FW4.5
    Hi @ErfinderDesRades

    anbei die Solution mit deinen Erweiterungen für .NET 4.5. Das Zip hat Dein SolutionExplorer erstellt, sollte also alles mit drin sein.
    Bitte im Startformular unten links den Button "ICa laden" klicken, damit das ICaDataSet gefüllt wird (lädt ICaDataSet.xml). Dann "Arbeitsliste kurz" klicken und versuchen, eine Bemerkung zu löschen. Mir gelingt das nicht.
    Btw, im Datumfeld "Screening" habe ich 01.01.1900 als DefaultValue eingetragen. Ist nicht glücklich, denn wenn ich das Datum noch nicht habe, was im Business Workflow zunächst normal ist, sollte das Feld leer sein. Wie realisiert man das?
    Ach und probier mal das "Suche" Feld und lob mich bitte ;)

    Danke für deine Bemühungen.
    Dateien
    • ICaSE07.zip

      (574,15 kB, 11 mal heruntergeladen, zuletzt: )

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „OliverSte“ ()

    OliverSte schrieb:

    im Datumfeld "Screening" habe ich 01.01.1900 als DefaultValue eingetragen. Ist nicht glücklich, denn wenn ich das Datum noch nicht habe, was im Business Workflow zunächst normal ist, sollte das Feld leer sein. Wie realisiert man das?

    Dafür hat EDR ein passendes CE entwickelt: NullableDateTimePicker
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von VaporiZed, mal wieder aus Grammatikgründen.

    ― Eine häufig von mir verwendete Abkürzung: CEs = control elements (Labels, Buttons, DGVs, ...)
    ― If Not GrammarIsOk() Then AssumeThatCodeIsOk = False
    ― »Oh, großes Spaghetticodemonster. Bitte schicke mir Durchblick! Oder zumindest eine Gabel. Oder – wenn es kein Besteck mehr gibt – zumindest Glasnudeln.«

    OliverSte schrieb:

    Also Zeichenfolge im DGV löschen und Enter drücken, schon ist der alte Wert wieder drin.


    Hab deine Anwendung starten können, hab was ins nächstbeste Dgv eingegeben, wieder rausgelöscht und weg wars.
    Wo Problem?

    Ansonsten hab ich paar Knöppe gedrückt, und iwelche xml geladen, die bischen nach was aussahen, aber dann Absturz.

    Bitte nachvollziehbare Beschreibung für doofies, was zu tun ist, damit ich das zu sehen bekomme, was ich sehen soll.

    OliverSte schrieb:

    Bitte im Startformular unten links den Button "ICa laden" klicken, damit das ICaDataSet gefüllt wird (lädt ICaDataSet.xml). Dann "Arbeitsliste kurz" klicken und versuchen, eine Bemerkung zu löschen.


    Noch genauer kann ich das nicht beschreiben. Ich mach mal Fotos:

    Im Startbildschirm zunächst [ICa laden] klicken, danach [Arbeitsliste kurz] klicken.

    In diesem Formular die zweite Bemerkung löschen und "Enter" drücken.
    Und schwupps ist sie wieder da.
    Das DGV führt durch die Bindung an die ICaBindingSource zur DataSet-Tabelle ICa, in der die Spalte Bemerkung ist. Soweit so klar. Da bei der allerdings eingestellt ist: AllowDBNull = False (und im weiteren NullValue = ThrowException), ist ein Leertext nicht vorgesehen und wird somit bei der DGV-Bearbeitung abgelehnt. Um das zu ändern: AllowDBNull: True und NullValue: (Nichts)
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von VaporiZed, mal wieder aus Grammatikgründen.

    ― Eine häufig von mir verwendete Abkürzung: CEs = control elements (Labels, Buttons, DGVs, ...)
    ― If Not GrammarIsOk() Then AssumeThatCodeIsOk = False
    ― »Oh, großes Spaghetticodemonster. Bitte schicke mir Durchblick! Oder zumindest eine Gabel. Oder – wenn es kein Besteck mehr gibt – zumindest Glasnudeln.«
    ah - jetzt
    wie gesagt: hängt mitte NullValue-Property zusammen.
    Die ist im DefaultCellStyle der Dgv-Column versteckt.
    Trag da mal ~ ein, oder ~#23?öüi.
    Dann geschieht diese zauberische Wiederherstellung nur, wenn man ~ eingibt, oder ~#23?öüi.

    Ist iwie komisch, dass das Dgv einen Nullvalue haben kann auch bei Spalten, die Null garnet zulassen.
    Die Lösung von @ErfinderDesRades funktioniert, nun muss ich also immer bei Textspalten in allen DGV aufpassen, da ein ~ einzugeben.
    Da erscheint die Lösung von @VaporiZed einfacher, obwohl ich DBNull verbieten wollte.
    Was für eine Zwickmühle ... welchen Weg soll ich gehen?
    Hm. Ließe sich ggf. automatisieren. Statt es im Designer festzulegen, ggf. eine entsprechende standardisierte Funktion im FormularLoad-Ereignis aufrufen, welche jede DGV-TextBoxColumn mit einem Nullwert versieht. Als Hauptzeilen darin:

    VB.NET-Quellcode

    1. Dim DataGridViewCellStyleWithSpecialNullValue = New System.Windows.Forms.DataGridViewCellStyle()
    2. DataGridViewCellStyleWithSpecialNullValue.NullValue = "~"
    3. CurrentDgvTextBoxColumnToChange.DefaultCellStyle = DataGridViewCellStyleWithSpecialNullValue

    (Ich geb's zu. Hab die Zeilen aus der Designer.vb geklaut und zusammengesetzt)
    Die Funktion sollte mit ein paar Schleifchen durch alle Controls/DGVs gehen und nach TextBoxColumns suchen. Oder entsprechend Deinen Anforderungen laufen.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von VaporiZed, mal wieder aus Grammatikgründen.

    ― Eine häufig von mir verwendete Abkürzung: CEs = control elements (Labels, Buttons, DGVs, ...)
    ― If Not GrammarIsOk() Then AssumeThatCodeIsOk = False
    ― »Oh, großes Spaghetticodemonster. Bitte schicke mir Durchblick! Oder zumindest eine Gabel. Oder – wenn es kein Besteck mehr gibt – zumindest Glasnudeln.«
    jo - 2 Wege: Entweder Datenmodell ändern, oder CellStyle.NullValue.
    ich wie gesagt würde am Datenmodell nix ändern, und den NullValue halt auf ieinen Unfug festlegen, den sicher keiner eingibt.
    Es gibt übrigens auch Zeichen, die mit der Tastatur ühaupt nicht eingebbar sind - chrw(192) oder sowas.