Index im DGV wiederfinden und auswählen

  • VB.NET

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

    Index im DGV wiederfinden und auswählen

    Hi,
    ich lege über ein Formular einen Neuen DatenSatz an.
    Nach dem Schließen des Formular, soll der Datasatz in der DGV selectiert sein !

    Vor dem schließen des Formular merke ich mir, über eine Globale Variable, den neu angelegten Datensatz (Index).
    Dann befülle ich die DataTable (in Form1) neu. Damit auch der neue Datensatz drin ist.

    Und wie kann ich den neuen DataSatz im DataSet markieren, so das auch das DGV es mitbekommt und markiert ist ?

    danke
    Bernd

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

    Bernd schrieb:

    Dann befülle ich die DataTable (in Form1) neu. Damit auch der neue Datensatz drin ist.

    Das zeigt einen architektonischen Design-Fehler:
    Du hast die Daten doch bereits im Client, und daher ists (bei geeigneter Architektur) unnötig, die Daten erst zu speichern, und dann wieder neu zu laden.

    Bei geeigneter Anwendungs-Architektur hättest du ein globales Dataset, auf dem sowohl das Mainform als auch das SubForm zugreift.

    Eine sehr einfache Methode, ein Dataset zu "globalisieren", bietet die Dataset.Register(me) - Methode der WinFormHelpers-Dll aus [VB 2008] DBExtensions.

    Beachte: das Gesamt-Tut beschäftigt sich viel mit Datenbanken, jedoch die Funktionalität zur "Dataset-Globalisierung" hat mit DBs ja nix zu tun, und ist daher auch inne WinformHelpers-Dll bereitgestellt, sodaß das "DatasetOnly"-Projekt die DBExtensions-Dll garnet einbindet.

    Ich habs dir ja gesagt, du wirst das Zeug brauchen, aber du hast einen (sehr verständlichen) Widerwillen, Code einzubauen, den du nicht nachvollziehen kannst.
    Andererseits verwendest du ja ständig unnachvollziehbaren Code - nämlich das ganze Zeug im Framework ist nicht nachvollziehbar - was meinst du, wie irrsinnig kompliziert der Code sein mag, der mw. hinter einer einfachen Textbox steht?

    Es kommt nicht darauf an, den Code zu verstehen, sondern man muß nur wissen, wie man ihn aufruft.

    Und der Aufruf der Dataset.Register(Form) - Extension-Methode ist einfacher nicht zu gestalten :D
    Ich habe mir deine ganzen Bereichte nochmals durchgelesen.
    Leider wieder ohne Erfolg. Ist mir alles noch zu mächtig.

    In dieser Diskussion mit gonzo16 sieht man, was geschied wenn man etwas einbindet, was man aber garnicht nachvollziehen kann.
    Dazu auch den Thread von Vatter

    Nun drum,
    ich schreibe jetzt lieber viele unnötige Programme. Mit vielen Zeilen Code. Die ich dann später einfach weider lösche und nochmals von vorne anfange. Bevor ich irgendetwas einbinde. Selbst wenn es sich hier um tausende Zeile Code handelt.

    Einbinden ist ja schnell erledigt. Ne Handvoll Befehle raussuchen auch.
    Aber was ist mit "Verstehen" ? Fehlersuche bei bedarf ?.........

    Neeeeehhhhhh Danke!

    Aber zwei Sachen die ich Interessant finde.

    auf den Videos von Bath Massi ist zu sehen das Sie mit immer wieder neuen DataSet's arbeitet.
    Daher habe ich mir das vermutlich angeeignet.
    Du schreibst in deiner Antwort etwas von Globalem DataSet.

    ErfinderDesRades schrieb:

    Bei geeigneter Anwendungs-Architektur hättest du ein globales Dataset, auf dem sowohl das Mainform als auch das SubForm zugreift.

    Genau das finde ich nun Interessant.

    Wie erstelle ich einen neue Form und greife aber auf das bestehende Firm1.DataSet zu ?

    Zweite Sache war der Thread von Vatter,
    den ich leider nicht Nachvollziehen kann.
    Kommt aber eigentlich auf die erste Sache hinaus.

    danke
    Bernd

    @EDR
    danke, wie immer

    Nun habe ich von Dr. Fleischer noch einen Bericht gefunden.
    Gemeinsam genutzte Klasse für die Bereitstellung der Daten.
    Mal sehen ob ich damit etwas Anfangen kann ?

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

    Bernd schrieb:

    In dieser Diskussion mit gonzo16 sieht man, was geschied wenn man etwas einbindet, was man aber garnicht nachvollziehen kann.
    Ja, genau.
    Ich denke, er hat eine Riesen-Menge gelernt. Warum er auf meine Antwort auf sein letztes Problem nicht antwortet, weißichnich. Vlt. ist er wieder in einer Auszeit, oder er hats gelöst, ohne Rückmeldung, oder er hat aufgegeben, und werkelt iwie anners weiter.
    Aber er hat alle nötigen Informationen, und ein Beispiel, wies funzt
    Dazu auch den Thread von Vatter
    Auch Vatter hat profitiert, dadurch, dasser das Problem der redundanten Datasets erkannt hat - auch hier habich keine Rückmeldung, ob er meine Lösung verwendet, oder iwas anneres
    Nun drum,
    ich schreibe jetzt lieber viele unnötige Programme. Mit vielen Zeilen Code. Die ich dann später einfach weider lösche und nochmals von vorne anfange. Bevor ich irgendetwas einbinde. Selbst wenn es sich hier um tausende Zeile Code handelt.

    Einbinden ist ja schnell erledigt. Ne Handvoll Befehle raussuchen auch.
    Aber was ist mit "Verstehen" ? Fehlersuche bei bedarf ?
    Nujaa - die Zusammenstellung und mundgerechte Bereitstellung der Aufrufe ist relativ neu, aber die einzelnen von mir darin verbauten Teile verwende ich schon länger - die sind glaub recht fehlerfrei (hähä - das ist ja mein Kalkül, dass Nutzer dieser Dlls vlt. doch noch Bugs finden, wovon ich ja auch profitiere)

    Aber vorwiegend erwarte ich so Anfänger-Fehler, die nicht anne DBExtensions liegen, sondern, dass beim Aufruf was falsch gemacht wird, oder auch schon beim Einbinden.
    Aber grade das Wissen, wie man Dll-Projekte richtig einbindet, gehört zum Handwerkszeug, wenn man bisserl was größeres proggen will.
    auf den Videos von Bath Massi ist zu sehen das Sie mit immer wieder neuen DataSet's arbeitet.
    Daher habe ich mir das vermutlich angeeignet.
    Beth Massis Tuts behandeln Vorgehensweisen zum Datenabruf, binden und filtern von Datasets und Zeug.
    Das sind eingegrenzte Samples, die sich nicht mit der notwendigen übergeordneten Anwendungs-Architektur auseinandersetzen, oder da iwas berücksichtigen.
    (Also soweit ich da drin rumgeguckt habe, inzwischen ist glaub ne Menge dazu gekommen. Ich bin nicht in allem mit Beth Massis Demonstrationen einverstanden, zB. macht die auch um jeden Daten-Abruf diesen unverantwortlichen TryCatch, der während der Entwicklung das Debuggen erschwert, und im Produktiv-System wahre Katastrophen verursachen kann (Anwendung läuf instabil weiter - gugge AvoidTryCatch))
    Du schreibst in deiner Antwort etwas von Globalem DataSet.

    ErfinderDesRades schrieb:

    Bei geeigneter Anwendungs-Architektur hättest du ein globales Dataset, auf dem sowohl das Mainform als auch das SubForm zugreift.
    Genau das finde ich nun Interessant.

    Wie erstelle ich einen neue Form und greife aber auf das bestehende Firm1.DataSet zu ?
    Zweite Sache war der Thread von Vatter,...,Kommt aber eigentlich auf die erste Sache hinaus.
    absolut exakt!
    Vatters Frage war genau deine Frage:
    Wie erstelle ich einen neue Form und greife aber auf das bestehende Firm1.DataSet zu ?
    und die Antwort lautet (im Form_Load):

    VB.NET-Quellcode

    1. Dataset.Register(me)
    also wenn das keine einfache Lösung ist :D
    Nun habe ich von Dr. Fleischer noch einen Bericht gefunden.
    Gemeinsam genutzte Klasse für die Bereitstellung der Daten.
    Mal sehen ob ich damit etwas Anfangen kann ?
    Da bist du wieder beim rumwursteln mit vielen, untypisierten Datasets.
    Databinding ist damit eine absolute Quälerei, weil mans nicht mehr im Form-Designer zurechtklicksen kann.
    Und Daten-Redundanz ohne Ende, sodass da halt sowas bei rauskommt, wie deine Eingangs-Frage:
    "Ich öffne ein Form, bearbeite Daten, speicher die zurück, schließe dass Form, und lade die Daten neu - äh - wo ist jetzt der selektierte Index??"

    Edit: Ups - jetzt binnich viel zu sehr auf die DBExtensions eingegangen. Soweitichweiß, bist du ja in MySql unterwegs, und da kommen für dich nur die WinForms-Extensions in Frage, mit denen du dein redundantes Dataset-Problem lösen kannst.
    Die sind ja nochmal viiel einfacher, da gehts ja nur um die eine einzige notwendige Register-Funktion.
    Das annere, die BindingSource-Extensions, oder die Standard-Speichern-Abfrage beim Schließen der Anwendung - sind ja alles nur Dreingaben.

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

    @System
    klar war meine erste Idee.
    Habe aber keine ID (Index) in der DGV.
    Was soll der User unnötige Daten sehen ?

    Dann müsste ich die Spalte am Ende anfügen und auf Visible = False setzen.
    Frage ob es dann noch ansprechbar ist ?
    Ist aber eh keine schöne lösung.

    Bei einer BindingSource gibt es nur MoveFirst/Last..... und Position.
    Die Position kann aber nciht stimmen, da ich mit indingSouce sortiere !

    Bleibt mir also nur DGV Select übrig.

    schade

    danke dir
    Bernd

    @EDR
    und die Antwort lautet (im Form_Load):

    Visual Basic Quellcode
    1
    Dataset.Register(me)
    also wenn das keine einfache Lösung ist



    genau das such ich jetzt rauszufinden. wo wie warum.

    danke auch dir
    Bernd

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

    Bernd schrieb:

    Bei einer BindingSource gibt es nur MoveFirst/Last..... und Position.
    Falsch.
    Du kannst aus einer BindingSource jeden Datensatz an jedem gültigen Index abrufen. bindingSource.Item(index) ist die Default-Poperty der BindingSource.
    guck dir das Ding doch wirklich mal im ObjectBrowser an.
    Die typisierte DataRow am Index musstehalt mit dem dir schon bekannten doppelten Cast auspuhlen, oder du verwendest halt meine BindingSource.At(indx) - Extension

    Aber das nur zur Info. Bei deinen redundanten Datasets musst du ja die DataTable löschen und neu laden, und dann ist natürlich auch die DataRow am Index im Eimer.
    Kannst dir höchstens die ID merken, und nachm Laden in der neu befüllten Bindingsource wieder aufsuchen.

    Edit:
    System.Windows.Forms.BindingSource.IndexOf() hast du ja sicherlich bereits im ObjectBrowser selbst gefunden :evil:
    oh, oh! - IndexOf funzt ja garnet so, wie ich denktete.

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „ErfinderDesRades“ ()

    aber genau das hatte ich versucht.
    leider ist er nicht dahin gesprungen.

    jetzt habe ich das Ding gelöscht.

    Egal ich versuche mich jetzt an eine Neuen Form
    Kontoauszug.

    Dort versuche ich jetzt mit einem DataSet zu arbeiten.
    Vielleicht springt er ja dann dort hin.
    Wenn ich mich jetzt nicht täusche, hatte mal mit Datenbanken in Vb6 zu tun gehabt, da kann man lesenzeichen setzen, diese merken und beim laden diesen datensatz markieren....weis nicht mehr wie des genau war...
    Eine andere spontane möglichkeit du kannst in DGV eine neue Spalte anlegen z.b "Status", sobald du neue Datensatz anlegst, schreibt dein programm in diese Spalte z.b "N" = Neue Datensatz. Beim laden läufst deine DGV durch und markierst diesen Datensatz mit Status "N".
    Spalte "Status" kannst zur laufzeit ausblenden.
    nicht ganz...
    Klar wenn ich mich generell mit dem DGV unterhalte.
    Habe ich dann auch nichts dagegen.
    Ich unterhalte mich aber mit einem DataSet und einer BindingSource.

    Die DGV zeigt und markiert immer den Datensatz den ich grade (Current)
    bearbeite. Also brauche ich im DataSet bzw. in der BindingSource nur meinen benötigten anzuspringen.

    Im Beitrag vorher von EDR gezeigt.

    Jedoch hatte ich das ohne erfolg verscuht.

    vielleicht lag es daran das ich wirklich mit zwei versiedenen DataSet gearbeitet habe.

    wie gesagt
    ich mache mal ein neues Projekt und versuche mit einem DataSet zu rabeiten.


    Danke dir

    Bernd
    ich kann an DatasetOnly auch versuchen, ein externes Form dranzubasteln, mit demselben Einzelblattview, der derzeit auf dem Artikel-Reiter rechts zu sehen ist.
    Dazu würde ich die ArtikelId hineinreichen, und dann würde das SubForm auf demselben Artikel rumhühnern, der im MainForm angewählt ist.
    benötigst du auch eine Cancel-Option?