none
Problem bei Auswahl von Daten-Typen RRS feed

  • Frage

  • Hallo zusammen.

    Ich habe ein Problem, für das ich einfach keine Lösung finde:

    Ich möchte in meiner Anwendung eine Auswahl von Daten-Typen zur Verfügung stellen und habe dafür einen DataTable mit folgender Struktur erstellt:

              | DataColumn „Key“ (String)   | DataColumn „Type“ (String)  
    ________________________________________________________
    Row 0 | Text                                    |   System.String
    Row 1 | Ganzzahl                             |   System.Int32
    Row 3 | Dezimalzahl                         |   System.Decimal
    Row 4 | Datum                                |   System.DateTime
    Row 5 | Wahrheitswert                     |   System.Boolean


    Der Anwender soll aus einer ListBox, die die Werte der Spalte „Key“ enthält, einen Wert auswählen.

    Jetzt kommt das Problem: Ich hatte mir gedacht, dass ich dann „einfach“ mit

    CType(Ein_Wert, System.Type.GetType(DataTable.Rows(Index)(„Type“))

    einen Wert in den ausgewählten Daten-Typen konvertieren könnte, aber leider wird innerhalb der Funktion CType() diese von mir gedachte Syntax nicht akzeptiert.

    Gibt es irgendeine Möglichkeit, die Funktionalität hinzubekommen?

    Vielen Dank für Eure Hilfe

    VG
    Carsten

     

     

    Mittwoch, 14. September 2011 06:14

Antworten

  • Hallo Carsten,

    die Frage wäre: Wozu soll die Datentyp-Auswahl danach dienen?

    Der einzige Typ, der alle Typen aufnehmen kann, wäre System.Object.

    Um aus der Zeichenkette einen System.Type zu generieren, kannst Du Type.GetType verwenden,
    günstiger könnte sein, in der Spalte bereits den Type zu speichern.

    .NET seitig konvertieren kannst Du mit Hilfe von Convert.ChangeType,
    solange der  System.Type IConvertible implementiert (die oben aufgeführten alle).
    Wobei der Wert darüber konvertierbar sein muss - was z. B. beim Umwandeln
    von Zeichenketten in eine Zahl (z. B. Decimal) wiederum  kulturabhängig sein kann,
    u. a. wegen Dezimalpunkt/-komma.

    Das Verhalten von CType erreichst Du über Conversions.ChangeType.

    Gruß Elmar

    • Als Antwort markiert C. Mehnert Freitag, 16. September 2011 05:53
    Mittwoch, 14. September 2011 22:11
    Beantworter

Alle Antworten

  • Hallo Carsten,

    die Frage wäre: Wozu soll die Datentyp-Auswahl danach dienen?

    Der einzige Typ, der alle Typen aufnehmen kann, wäre System.Object.

    Um aus der Zeichenkette einen System.Type zu generieren, kannst Du Type.GetType verwenden,
    günstiger könnte sein, in der Spalte bereits den Type zu speichern.

    .NET seitig konvertieren kannst Du mit Hilfe von Convert.ChangeType,
    solange der  System.Type IConvertible implementiert (die oben aufgeführten alle).
    Wobei der Wert darüber konvertierbar sein muss - was z. B. beim Umwandeln
    von Zeichenketten in eine Zahl (z. B. Decimal) wiederum  kulturabhängig sein kann,
    u. a. wegen Dezimalpunkt/-komma.

    Das Verhalten von CType erreichst Du über Conversions.ChangeType.

    Gruß Elmar

    • Als Antwort markiert C. Mehnert Freitag, 16. September 2011 05:53
    Mittwoch, 14. September 2011 22:11
    Beantworter
  • Hallo Elmar.

    Vielen Dank für Deine Antwort.

    Die Auswahl soll danach dazu dienen, in einem FlexGrid den Datentypen einzelner Zeilen bzw. Zellen und deren Formatierung festzulegen. Sozusagen dynamisch. Ich kann damit erreichen, dass Select-Case-Blöcke in unvermeidlichen For-Next-Schleifen weggelassen werden können. Die Anwendung erhält dadurch zur Laufzeit eine Erweiterbarkeit, die nicht möglich wäre, wenn man Select-Case-Böcke im Code verwendet.

    Ich werde mir Conversion.ChangeType mal zu Gemüte führen.

    VG

    Carsten

    Donnerstag, 15. September 2011 08:37