Hallo liebe Gemeinde,
ich bin dabei ein Usercontrol zu verbrechen, dass ausschließlich über eine Bindingsource mit Daten versorgt werden soll. Ais Propertys gibts halt die Datasource und ein Array mit den ColumnNamen, damit ich die Werte aus der Bindingsource.List auslesen kann.
Nun können die gebundenen Daten ja alle möglichen Typen repräsentieren (Date, String, Double, Integer usw.) und werden deshalb als Object übergeben. Ich habe dann ein wenig im Datagrid spioniert und dort gibt es für jede Spalte ja noch die Format-Eigenschaft, welche die Ausgabe z.B. eines Datums in allen möglichen Formatierungen erlaubt. Und das möchte ich nachbauen.
Allerdings steht die Überladung der XY.ToString-Methode mit einem Formatstring nicht in allen Datentypen zur Verfügung, weshalb ich die Typen vorher analysieren und entsprechen umwandeln muß.
Ich habe das jetzt in einer Testform so simuliert:
Nach Eingabe eines Wertes in eine Textbox wird ein gewünschter Datentyp mittels Button erzeugt und an ein Object übergeben.
Dieses Beispiel funktioniert problemlos.
Ich frage mich aber, ob es noch eine allgemeinere Lösung gibt, da ich hier ja in der Sub Ausgabe alle zu erwartenden Datentypen "auflisten" müsste. Object.ToString() lässt ja keinen Formatstring zu. Und für die korrekte Darstellung ist ja auch die richtige Typumwandlung notwendig, da die jeweilige .ToString-Methode an den jeweiligen Datentypen gebunden ist.
Fielen Dank
Vatter
Achso: Textbox 2 enthält einen zu Fuß eingebbaren Formatstring zum Testen...
ich bin dabei ein Usercontrol zu verbrechen, dass ausschließlich über eine Bindingsource mit Daten versorgt werden soll. Ais Propertys gibts halt die Datasource und ein Array mit den ColumnNamen, damit ich die Werte aus der Bindingsource.List auslesen kann.
Nun können die gebundenen Daten ja alle möglichen Typen repräsentieren (Date, String, Double, Integer usw.) und werden deshalb als Object übergeben. Ich habe dann ein wenig im Datagrid spioniert und dort gibt es für jede Spalte ja noch die Format-Eigenschaft, welche die Ausgabe z.B. eines Datums in allen möglichen Formatierungen erlaubt. Und das möchte ich nachbauen.
Allerdings steht die Überladung der XY.ToString-Methode mit einem Formatstring nicht in allen Datentypen zur Verfügung, weshalb ich die Typen vorher analysieren und entsprechen umwandeln muß.
Ich habe das jetzt in einer Testform so simuliert:
Nach Eingabe eines Wertes in eine Textbox wird ein gewünschter Datentyp mittels Button erzeugt und an ein Object übergeben.
VB.NET-Quellcode
- Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles BtnString.Click, BtnDouble.Click, BtnDecimal.Click, BtnDateTime.Click, BtnDate.Click, BtnInteger.Click
- Dim O As Object
- Select Case True
- Case sender Is BtnString
- O = TextBox1.Text
- Case sender Is BtnInteger
- O = Integer.Parse(TextBox1.Text)
- Case sender Is BtnDouble
- O = Double.Parse(TextBox1.Text)
- Case sender Is BtnDecimal
- O = Decimal.Parse(TextBox1.Text)
- Case sender Is BtnDate
- O = Date.Parse(TextBox1.Text)
- Case sender Is BtnDateTime
- O = DateTime.Parse(TextBox1.Text)
- Case Else
- O = "Ist keins von alle"
- End Select
- Ausgabe(O)
- End Sub
- Sub Ausgabe(o As Object)
- Select Case True
- Case TypeOf o Is Integer
- Label1.Text = CType(o, Integer).ToString("# ist Integer")
- Case TypeOf o Is DateTime
- Label1.Text = CType(o, DateTime).ToString(TextBox2.Text) & "ist DateTime"
- Case TypeOf o Is Date
- Label1.Text = CType(o, Date).ToString("D hh:mm:ss ") & "ist Date"
- Case TypeOf o Is Decimal
- Label1.Text = CType(o, Decimal).ToString("#.## ist Dezimal")
- Case TypeOf o Is Double
- Label1.Text = CType(o, Double).ToString("#.## ist Double")
- Case TypeOf o Is String
- Label1.Text = CType(o, String).ToString() & " ist ein String"
- Case Else
- End Select
- End Sub
Dieses Beispiel funktioniert problemlos.
Ich frage mich aber, ob es noch eine allgemeinere Lösung gibt, da ich hier ja in der Sub Ausgabe alle zu erwartenden Datentypen "auflisten" müsste. Object.ToString() lässt ja keinen Formatstring zu. Und für die korrekte Darstellung ist ja auch die richtige Typumwandlung notwendig, da die jeweilige .ToString-Methode an den jeweiligen Datentypen gebunden ist.
Fielen Dank
Vatter
Achso: Textbox 2 enthält einen zu Fuß eingebbaren Formatstring zum Testen...
Seit 26.Mai 2012 Oppa!