Feld aus einer Tabelle auslesen, welche gerade angezeigt wird



  • Hi,

    in einem WindowsForm werden Daten aus einer Adresstabelle angezeigt. Des Weiteren gibt es dort noch ein Paar weitere Felder, in diese kann der Benutzer Informationen eintragen, welche dann in einer anderen Tabelle gespeichert werden.

    In der anderen Tabelle muss in einem Feld allerdings der Primärschlüssel des aktuell angezeigten Adressdatensatz verspeichert werden.

    Wie komme ich da ran? Gibt es einen Befehl, mit dem ich den Wert ermitteln kann?
    Ich brauche irgendwie Zugriff auf den gerade angezeigten Datensatz...



  • Also ein DataSet beherbergt ja eine DataTable welche wiederum

    die Eigenschaft PrimaryKey hat.

    Eben über diese Eigenschaft erfährt man den/die Namen der Spalte[n] die primär ist/sind.

    P.S.: Du kannst sogar Constraints in Erfahrung bringen weil die DataTable eben auch eine solche benannte Eigenschaft hat.

    Auch nachlesber an der Stelle

    PrimaryKey ist ein Array von DataColumn hat man also nur einen einfache Schlüssel enthält das Array nur ein Element. aber Du kommst darüber an die Spaltennamen ran.

    So Du brauchst den nurnoch in einer Variablen Speichern und verwendest diese Daten um über den Indexoperator bei einer DataRow um auf den Inhalt unter dieser Zelle zugreifen zu können.

    [url=http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemdatadatatableclassprimarykeytopic.asp]Erklärung der
    PrimaryKey-Property[/url]



  • Wenn Du mit BindingContext arbeitest holst Du Dir so den aktuelle Index des aktuellen DS:

    int RowIndex = BindingContext[dataSet11.Tables["Themengebiete"]].Position;
    

    So mit dem Wissen das Du Du über PrimaryKey an die Namen der Primärschlüsselspalte[n] rankommst was Wir im Hinterkopf behalten.
    Holen Wir uns erstmal den kompletten aktuellen Datensatz, siehe BindingContext oben.

    DataRow CurrentRow = dataSet11.Tables["Themengebiete"].Rows[RowIndex];
    
    /* Jetzt über PrimaryKey Schlüsselspate[n] in Erfahrung bringen */
    .
    .
    .
    
    /* CurrentRow mit den Namen der Schlüsselspalten abgrassen */
    .
    .
    .
    

    Bei HitestInfo und einem DataGrid fällt die Positionsgewinnung über BindingContext nat. ins Wasser weil da bekommt man automatisch Indexe über Spalte und Zeile zugeschoben aber im weiteren Verlauf kann man es dann genauso machen.



  • private string [] DatenVonPrimaerSchlueselspalten(DataTable CurrentDataTable, int CurrentRowFromCurrentDataTable)
    {
         /* Jetzt über PrimaryKey Schlüsselspate[n] in Erfahrung bringen */ 
         DataColumn [] primColumns = CurrentDataTable.PrimaryKey;
    
         /* Oh eine Tabelle ohne Primärschlüssel, da gibst nichts zurück */ 
         if(primColumns.Length == 0) 
         {
             MessageBox.Show("Tabelle ohne Primärschlüssel");
             return null;
         }
    
         /* CurrentRow mit den Namen der Schlüsselspalten abgrassen */ 
         string [] daten = null;
         try
         {
             DataRow CurrentRow = CurrentDataTable.Rows[CurrentRowFromCurrentDataTable];
             daten = new string [primColumns.Length];
             for(int idx = 0;idx<primColumns.Length;idx++)
             {
                  string Primärschlüsselspaltenname = primColumns[idx].Caption;
                  daten[idx] = CurrentRow[Primärschlüsselspaltenname].ToString();
             }
         }
         catch
         {
             MessageBox.Show("Überlauf bei Datensatzindex");
              return null;
         }
    
         return daten;       
    }
    

    Aufrufen könntest Du das so:

    string [] DatenNurVonDenSchlüsselSpalten = null;
    
    int RowIndex = BindingContext[dataSet11.Tables["NameAktuelleTabelle"]].Position;
    
    DatenNurVonDenSchlüsselSpalten = DatenVonPrimaerSchlueselspalten(AktuelleTabelle, RowIndex);
    
    if(DatenNurVonDenSchlüsselSpalten != null)
    {
         // Daten in Textfelder eintragen
         // in Abhängigkeit wieviele Elemente im Array sind kannst Du jetzt auch
         // Textfelder auf dein Formular dynamisch nachsetzen lassen und den
         // Inhalt des Arrays was durch die Funktion returned wird anzeigen lassen
         // Fehler behandelt die Methode ja Ihrerseits intern schon 
         .
         .
         .
    }
    

    Gruss sclearscreen

    P.S.: Kannst es ja mal testen hab es aber nicht selbst getestet habe mom gerade keine IDE zur Hand


Anmelden zum Antworten