Announcement

Collapse
No announcement yet.

Detailinfos unter DatagridView

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

  • Detailinfos unter DatagridView

    Hallo zusammen,
    hänge jetzt seit zwei Tagen an zwei Problemen. Ich habe eine Form in der sich oben ein DataGridView mit einer Datenübesicht befindet und darunter Textfelder und Comboboxen, die den oben ausgewählten Datensatz ausführlich im Detail mit allen vorhandenen Feldern auch zum ändern anzeigen soll. Ich habe nun im meinem DataSet im tableAdapter eine zweite Fill methode mit dem Parameter erstellt und das Ereignis SelectionChanged auf das DatagridView gesetzt, in dem ich die Sequenz der tabellenauswahl an die zweite Fill methode gebe:
    Code:
    this.kONTAKT_WEBTableAdapter.FillById(this.eURO_WEB_DATA.KONTAKT_WEB, (int)selRow.Cells[0].Value);
    Ich habe auf die Textfelder die zuzuordnenden Spalten gezogen und bei zwei Schlüsselwerten (Comboboxen) die Datenbindung angepasst.
    Der Effekt ist folgender: wenn ich eine Zeile auswähle, erhalte ich auch bei dem DataGridView nur noch eine Zeile. Mein Versuch einen zweiten TableAdapter zu erstellen ist mit demselben Effekt fehlgeschlagen. Muss ich jetzt wirklich ein zweites DataSet erstellen? Das geht doch bestimmt anders...

    Mein zweites Problem ist folgendes: Ich habe einen Statuswert in der angezeigten Haupttabelle (als id mit Verweis auf die Schlüsseltabelle). In Abhängigkeit zum hinterlegten Statustyp sollen die Zeilen eingefärbt werden. Der Typ befindet sich in der Schlüsseltabelle und ist eindeutig. ich habe das Ereignis PostPaint eingebunden und alles funktioniert wenn ich die id der Haupttabelle abfrage. Ich komme aber irgendwie nicht an den Typ der Schlüsseltabelle, obwohl dieser mir bei einbinden einer Combospalte immer angezeigt wird. ich habe es über:
    Code:
    this.sCHL_KONT_STATUSTableAdapter.FillById(this.eURO_WEB_DATA.SCHL_KONT_STATUS, Convert.ToInt32(aktRow.Cells[1].Value));
    ilKontsType = Convert.ToInt32(this.eURO_WEB_DATA.SCHL_KONT_STATUS.KONTS_TYPColumn);
    versucht, doch das funktioniert so nicht. Was mache ich falsch?

    Danke im Voraus
    Kerstin

  • #2
    Hallo und willkommen,

    ganz habe ich Deine Situation nicht verstanden (ich arbeite nicht mit Visual Studio und TableAdapter). Meine Vermutung ist, dass Du eine oder zwei BindingSources zwischen DataTable und Anzeigeelemente schalten solltest; dann werden das DataGridView auf die vollständige DataTable (mit Referenzwerten) und die TextBoxen auf BindingSource.Current geleitet.

    Vielleicht hilft's... Jürgen

    Comment


    • #3
      Deine Beschreibung ist leider etwas zu knapp.
      Nachfrage zum Verständnis - dein Grid zeigt nur eine Teilmenge der Daten(die Datensätze sind noch nicht vollständig sondern enthalten erstmal nur soviel Daten wie zum anzeigen im Grid notwendig sind), die anderen Controls auf der Form enthalten weitere Daten zum Datensatz und diese Daten müssen durch eine weitere Abfrage auf die Datenbank ergänzt werden. Am Grid und an den anderen Controls hängt aber die gleiche Datatable Instanz.
      Hab ich das so richtig verstanden?

      Wenn das so ungefähr stimmt wird der 2.te Aufruf von FillByXXX das Ergebnis des ersten FillByXXX überschreiben, das Ziel der Daten ist ja bei beiden Aufrufen die selbe Datatable Instanz und standardmäßig löscht der Tableadapter den Inhalt einer Datatable bevor er sie mit neuen Daten füllt. Wenn du einen bereits vorhanden Datensatz durch weitere Daten ergänzen willst und somit sozusagen einen Merge des 2.ten Aufrufs mit dem 1.ten machen willst so mußt du die ClearBeforeFill Property des TableAdapters auf false setzen.

      Comment


      • #4
        Zu deinem 2.ten Problem (du solltest bei mehreren Fragen besser mehrere Threads aufmachen), es sieht so aus als konvertierst du das DataColumn Objekt in deinen Typ. Das ist natürlich falsch. Erstmal konvertierst du das Objekt und nicht den von dir darin erwarteten Inhalt und zweitens enthält ein Datacolumn Objekt keine Daten sondern nur Metainformation zur Column. Die Daten stecken in der Datarow.

        Der Aufruf sollte also eher so aussehen
        ilKontsType = Convert.ToInt32(this.eURO_WEB_DATA.SCHL_KONT_STATU S[indexDerAusgewähltenRow].KONTS_TYP);
        oder wenn du dir Row schon hast
        ilKontsType = Convert.ToInt32(meineAusgewählteRow.KONTS_TYP);

        Comment

        Working...
        X