Einfache Tabelle



  • Hallo,

    sehe ich das richtig, wenn ich eine einfache Tabelle ohne Anbindung einer Datenbank verwenden möchte muss ich das DataGridView verwenden oder gibt es noch eine andere einfache Tabelle?

    Grüße



  • Hamm Tabelle in welchem sinne??? Haltung physikalischer Daten?? Oder ne "visuelle" Tabelle als matrix auf deiner GUI????



  • zudem - wpf oder forms ?



  • Ich wollte eine visuelle Tabelle in einer Form darstellen. Diese hat schon fest vorgegebene Spalten- und Zeilennamen. Die Felder der Tabelle haben verschiedene Datentypen wie Strings, Integer, Checkboxen, usw. Diese Werte müssen nach dem ändern sofort ausgelesen werden. Desweiteren sollen Eingaben überwacht werden die kontrollieren ob der eingegebene Wert deren Gültigkeit besitzen also z.B. keine Negativwerte oder nicht größer als 80 und und und.

    Ich hab mir jetzt das DataGridView angeschaut. Hab jetzt auch schon Spalten hinzugefügt. Zeilen müßen wie es aussieht via Code "dataGridView1.Rows.Add()" hinzugefügt werden. Leider haben dann die Zeilen keine Beschriftung. Vielleicht geht das auch irgendwie, habe mich aber noch nicht damit beschäftigt.

    Nun gut jetzt wollte ich Testhalbe mal einen Wert ausgeben, nachdem dieser in einer Zelle eingegeben wird. Dazu habe ich gedacht ist der CellValueChanged-EventHandler für zuständig. Den aktuellen Indexwert auslesen kein Problem, aber den Wert das ist gerade das Problem. Da knallt es wenn ich diesen Code verwende.

    label1.Text = e.ColumnIndex.ToString();
    
    label1.Text = (string)dataGridView1[e.ColumnIndex, e.RowIndex].Value;
    

    Meldung wäre Index außerhalb des Bereichs. Gleich wenn ich die Anwendung starte. Vermutlich hat er ein Problem wenn ich in der Form.Load Methode mit "dataGridView1.Rows.Add()" arbeite.

    Also wenn das Funktionieren würde wäre ich ja schon ganz zu Frieden. Nur fehlen dann halt noch die Zeilenbeschriftung.

    Die Zeilen können sich evtl. wärend der Laufzeit noch ändern. Daher ist das DataGridView vielleicht doch nicht ganz verkehrt.

    Danke schonmals



  • Was meinst Du mit "Leider haben dann die Zeilen keine Beschriftung." Du könntest die erste Spalte read-only machen und dann dort deine Überschriften schreiben.

    Du könntest auch mal ein anderes Event verwenden wie RowPrePaint oder mal den Debugger benutzen.



  • Stimmt hast recht. Daran hab ich nicht gedacht das erste Feld zu beschriften 😉

    Ok dann schau ich noch das ich das mit dem EventHandler hinbekommen.

    Besten Dank nochmals



  • So ich habs. Also meine Eingaben werden nun überprüft.

    So nächste schwierigkeit. Ist es irgendwie möglich einer Zelle einen versteckten Wert zuzuweißen? Sowas wie ein Hexwert. Also im Feld wird der Wert gespeichert und das Feld hat quasi die Zieladresse für das Gerät. Wie könnte ich das realisieren? Ein Array mit der Anzahl der Felder vom Gridview und dann die Adresse abfragen? Oder gibt es noch eine einfachere Lösung? Vielleicht ist auch mein Ansatz komplett falsch und hätte in der Zelle lieber ein ArrayObjekt speichern sollen. Aber dann wüßte ich nicht wie ich die Zelle bearbeiten soll.

    Bräuchte nur ein Tip damit ich nicht gleich in die falsche Richtung programmiere 😉

    Danke euch!!!



  • Die einfachste Lösung wäre unsichtbare Spalten in das GridView einzufügen und die Daten dort vorzuhalten.



  • Ok. d.h. eine Spalte für den Wert und eine Spalte für die Adresse. Könnte man ja auch so machen. Oder könnte man auch ein beliebiges Objekt an einen Tag (wenn es das gibt) der Zelle hängen? Dann könnte ich alle Daten die man brauch in ein Objekt schreiben. Dort auch z.B. einen Min und Max wert der aktuellen Spalte definieren und dann bei eingabe überprüfen welche Eigenschaft das obj hat. Vielleicht auch zu umständlich und kompliziert.

    Ich mach es glaube ich erstmal mit der Spalte.

    Danke dir.



  • Eine DataGridViewCell besitzt u.a. ein Value- und ein Tag-Property, beide akzeptieren ein beliebiges Objekt.



  • Hab wiedermal ein Problem, sorry.

    Die Zellen können ja unterschiedliche Typen besitzen. Also DataGridViewTextBoxColumn, DataGridViewCheckBoxColumn,...

    Teilweise muss ich einen Wert (Integer) prüfen. Um dies zu tun Caste ich den Text in ein Integer und prüfe den Wert. So jetzt das Problem, wenn ich im DataGridView eine Checkbox habe was mache ich da?

    Ich bin jetzt erstmal so vorgegangen:

    int.TryParse(dataGridView1[e.ColumnIndex, e.RowIndex].Value.ToString(), out wert)
    

    Das geht nur solange gut solange ich nur Stringwerte in die Felder eintrage. Sobald ich aber eine Checkbox selektiere knallt es und bekomme eine exception das es sich um ein Boolwert handelt.

    Es wird doch eine einfache Methode geben, bei der ich die Datentype auseinanderhalten kann.

    Ich muss quasi 2 (3) verschiedene Datentypen prüfen.

    Da man ja nur Stringwerte eingeben kann sind es 2 Datentypen.

    Ich brauche eine Lösung für folgendes:
    - ist es ein String behandel es als String
    - ist es ein Zahlenwert dann behandel es als Zahl um Berechnungen durchführen zu können
    - ist es eine Checkbox dann prüfe ob diese selektiert wurde also behandel es als Boolean.

    Wie kann ich das realisieren. Die Routine erfolgt im CellEndEdit Eventhandler.

    Am besten wäre irgend ein Beispiel.

    Ich könnte natürlich auch über die Spaltenüberschift der Zelle gehen. Und dann nach Spaltennamen differenzieren. Also z.B "Aktivieren" = Checkbox und z.B. Höhe ist dann ein Wert den ich zum Integer Parse. Das wäre dann halt noch eine alternative aber dann ist man Fixiert auf den Spaltennamen und wenn sich die Spaltenüberschrift mal ändern sollte dann gibt es wieder ein Problem.

    Besten Dank für die Hilfe.


Anmelden zum Antworten