| |
VB.NET - Ein- und UmsteigerRe: Beispiel Teil 1b Formular | | | Autor: Manfred X | Datum: 14.10.14 06:22 |
| Private Sub CreateBindings()
'Einrichtung der Bindungen zwischen Datasét und Controls
With Formulardaten
bsTexte.DataSource = .Tables(Formulartexte)
With .Tables(Formulartexte)
'Labels und Textboxen erstellen / binden
For i As Integer = 0 To .Columns.Count - 3
tbos(i).DataBindings.Clear()
tbos(i).DataBindings.Add("Text", bsTexte, .Columns( _
i).ColumnName)
Next i
End With
cboVerfahren.DataSource = .Tables(Verfahren)
cboVerfahren.DisplayMember = Verfahren
cboVerfahren.DataBindings.Clear()
cboVerfahren.DataBindings.Add("SelectedIndex", bsTexte, Verfahren)
cboSäulenraster.DataSource = .Tables(Säulenraster)
cboSäulenraster.DisplayMember = Säulenraster
cboSäulenraster.DataBindings.Clear()
cboSäulenraster.DataBindings.Add("SelectedIndex", bsTexte, _
Säulenraster)
dgv.DataSource = bsGrid
bsGrid.DataSource = .Tables(Weichschichtdaten)
End With
End Sub
Private Sub TextBox_KeyDown(ByVal sender As Object, e As KeyEventArgs)
'Die Return-Taste schließt Texteingaben ab und verschiebt den Fokus
If e.KeyCode = Keys.Return Then
bsTexte.EndEdit()
'Index der aktuell bearbeiteten Textbox
Dim index As Integer = CInt(DirectCast(sender, TextBox).Tag)
'Fokus verschieben
If index < tbos.Count - 1 Then
tbos(index + 1).Focus()
Else
tbos(0).Focus()
End If
End If
End Sub
Private Sub btnSpeichern_Click(sender As Object, _
e As System.EventArgs) Handles btnSpeichern.Click
bsTexte.EndEdit() : bsGrid.EndEdit()
Formulardaten.WriteXml(FormularFile, XmlWriteMode.WriteSchema)
End Sub
Private Sub btnLaden_Click(sender As Object, _
e As System.EventArgs) Handles btnLaden.Click
If IO.File.Exists(FormularFile) Then
'Geladene Daten verwerfen
Formulardaten.Dispose()
Formulardaten = New DataSet
'Daten aus Datei lesen
Formulardaten.ReadXml(FormularFile)
'Bindungen erstellen
CreateBindings()
End If
End Sub
Private Sub dgv_DataError(sender As Object, _
e As System.Windows.Forms.DataGridViewDataErrorEventArgs) _
Handles dgv.DataError
'Falsche Eingabe abfangen (kein numerischer Wert)
MsgBox(e.Exception.Message)
e.Cancel = True
End Sub | |
Hilfe bei Erstellung von Speichern unter und Laden. | | | Autor: Gespenst | Datum: 13.10.14 19:34 |
| Hallo Leute,
ich bin noch VB.Net anfänger. Ich habe mal eine Frage bzgl. speichern unter und laden. Ich habe mir zwar schon einige Tutorials angeguckt bzgl. Speichern aber irgendwie komme ich nicht auf mein gewünschtes Ergebnis.
Ich würde gerne meine 2 Comboboxen, 11 Textboxen und 1x Datagridview abspeichern und wie laden? Ist das irgendwie möglich und wenn ja, kann mir jemand eine Schritt für Schritt Anleitung geben? Gewünschtes Abspeicherformat ist mir eigentlich egal. Kann txt, csv, xml oder auch was eigenes sein. Da bin ich ganz offen.
Wäre euch sehr sehr dankbar.
Grüße
Nutze VB.Net 4.5 | |
Re: Hilfe bei Erstellung von Speichern unter und Laden. | | | Autor: Manfred X | Datum: 13.10.14 19:41 |
| Hallo!
Ich nehme an, Du willst nicht die Controls speichern, sondern die
darin enthaltenen Daten - oder geht es auch um das Speichern von
Eigenschaften der Controls (Color, Size, Location etc.)?
Im Net-Framework verwendet man eine geeignete Datenklasse für
die Aufbewahrung der Daten und bindet die Controls an Eigenschaften der
Datenklassen-Instanz.
Es wäre zunächst zu klären, wie Deine Datenklasse aussehen könnte?
Vielleicht eine Datatable, die Spalten enthält für die Anzeige im Grid
und (zusätzliche) Spalten für die Itemlisten der Comboboxen ????
| |
Re: Hilfe bei Erstellung von Speichern unter und Laden. | | | Autor: minimalist | Datum: 13.10.14 19:42 |
| Das wird dir weiterhelfen:
http://stackoverflow.com/questions/25859466/how-to-save-data-to-a-text-file | |
Re: Hilfe bei Erstellung von Speichern unter und Laden. | | | Autor: Gespenst | Datum: 13.10.14 19:47 |
| Hi,
danke für die schnelle Antwort. Es sollen nur die Daten gespeichert werden, mehr ist das nicht. Hier mal ein Link zu einem Bild, wie das Programm aussieht. Es läuft auch, nur das speichern und laden bekomme ich nicht hin.
http://www1.xup.to/exec/ximg.php?fid=53956235 | |
Re: Hilfe bei Erstellung von Speichern unter und Laden. | | | Autor: Manfred X | Datum: 13.10.14 19:57 |
| Ist Dir klar, wie Datenbindung funktioniert oder
stehen diese Informationen direkt in den Controls?
(Dieser Fall wäre umständlich zu handhaben!)
Den Inhalt einer Datatable kannst Du mit jeweils einer
Anweisung (Write/ReadXML) in einer XML-Datei ablegen
und mit einer weiteren Anweisung an das Datagridview-Control
binden (= dort anzeigen).
| |
Re: Hilfe bei Erstellung von Speichern unter und Laden. | | | Autor: Gespenst | Datum: 13.10.14 20:00 |
| Um ehrlich zu sein, habe ich keine Ahnung wie Datenbindung funktioniert. Die Informationen stehen aber direkt in den Zellen, denn die sind als Eingabe gedacht, weil ich nicht weitere 80 Textboxen eingeben wollte habe ich das mit einem DataGridView gelöst.
Ok, wenn ich das so einfach als xlm speichern kann, wie funktioniert das mit den Textboxen und den beiden Comboboxen und habt ihr dafür ein Beispiel?
Würde gerne den Speicherpfad auswählen können. | |
Re: Hilfe bei Erstellung von Speichern unter und Laden. | | | Autor: Manfred X | Datum: 13.10.14 20:35 |
| Hier ein Beispiel für die Textboxen
(Texte stehen in eine Zeile der Datatable)
'Datenklasse
Dim dtTexte As New DataTable
dtTexte.TableName = "Meine Textbox_Daten"
With dtTexte.Columns
.Add("Flächenverhältnis", GetType(String))
.Add("Säulenradius", GetType(Double))
.Add("Belastung", GetType(Integer))
End With
dtTexte.Rows.Add("0.1", 0.4, 100)
'Speichern
dtTexte.WriteXml("C:\daten\test.xml", XmlWriteMode.WriteSchema)
dtTexte.Clear()
'Laden
dtTexte.ReadXml("C:\daten\test.xml")
'Infrastruktur für Bindung
Dim bsTexte As New BindingSource(dtTexte, Nothing)
bsTexte.Position = 0
'Datenbindung an Controls
Dim txtFlächenverhältnis, txtSäulenRadius, txtBelastung As New TextBox
txtFlächenverhältnis.DataBindings.Add("Text", bsTexte, _
"Flächenverhältnis")
txtSäulenRadius.DataBindings.Add("Text", bsTexte, "Säulenradius")
txtBelastung.DataBindings.Add("Text", bsTexte, "Belastung") | |
Re: Hilfe bei Erstellung von Speichern unter und Laden. | | | Autor: Gespenst | Datum: 13.10.14 22:25 |
| Danke, das funktioniert soweit so gut, das speichern. Aber wie bekomme ich da das DataGridView gespeichert? | |
Re: Hilfe bei Erstellung von Speichern unter und Laden. | | | Autor: Manfred X | Datum: 13.10.14 23:11 |
| Auch als Datenquelle für das Datagridview verwendest Du eine Datatable.
Dort trägst Du die Daten nach dem Erstellen der Spalten in die Zeilen ein.
Diese Table kannst Du an die DataSource-Eigenschaft des Grid binden.
Das gilt ebenfalls für die Comboboxen.
Diese Controls kannst Du per "Datasource"-Eigenschaft an eine Datatable binden
und eine Table-Spalte als Itemliste der Combobox sichtbar machen (DisplayMember).
Dim dtCombo As New DataTable
dtCombo.TableName = "CboC1_Items"
With dtCombo.Columns
.Add("CboItems", GetType(String))
End With
With dtCombo.Rows
.Add("IT1")
.Add("IT2")
.Add("IT3")
End With
Dim cboC1 As New ComboBox
Dim bsC1 As New BindingSource(dtCombo, Nothing)
cboC1.DataSource = bsC1
cboC1.DisplayMember = "CboItems" Die (benannten) Tables kannst Du in einem Dataset
zusammenfassen und alle mit einer Anweisung laden / speichern.
Dim ds As New DataSet
ds.Tables.Add(dtCombo)
ds.Tables.Add(dtTexte)
ds.Tables.add(dtGrid)
ds.WriteXml("C:\daten\dataset.xml", XmlWriteMode.WriteSchema) | |
Re: Hilfe bei Erstellung von Speichern unter und Laden. | | | Autor: Gespenst | Datum: 14.10.14 00:07 |
| Hi,
ok erstmal schon riesen Dank dafür. Jedoch bin ich wohl zu blöd, das DataGridView zu speichern. Das ist bis jetzt mein Code. Wo ist das mein Denkfehler?
Dim dtTexte As New DataTable
dtTexte.TableName = "Geometrie und Säulenmaterial"
With dtTexte.Columns
.Add("Flächenverhältnis", GetType(Double))
.Add("Säulenradius", GetType(Double))
.Add("Aktivierungsaufweitung", GetType(Double))
.Add("Dehnsteifigkeit", GetType(Double))
.Add("Belastung", GetType(Double))
.Add("Luftdruck", GetType(Double))
.Add("Ohde", GetType(Double))
.Add("Poisson", GetType(Double))
.Add("Säulenabstand", GetType(Double))
.Add("Scherfestigkeit", GetType(Double))
.Add("Wichte", GetType(Double))
.Add("Weichschicht", GetType(Double))
End With
dtTexte.Rows.Add(TextBox1.Text, TextBox2.Text, TextBox3.Text,
TextBox4.Text, TextBox5.Text, TextBox6.Text, _
TextBox7.Text, TextBox8.Text, TextBox9.Text, _
TextBox10.Text, TextBox11.Text)
Dim dtCombo As New DataTable
dtCombo.TableName = "Auswahlboxen"
With dtCombo.Columns
.Add("Säulenraster", GetType(String))
.Add("Verfahren", GetType(String))
End With
With dtCombo.Rows
.Add(ComboBox3.SelectedItem)
.Add(ComboBox2.SelectedItem)
End With
Dim cboC1 As New ComboBox
Dim bsC1 As New BindingSource(dtCombo, Nothing)
cboC1.DataSource = bsC1
cboC1.DisplayMember = "Auswahlboxen"
Dim dtDGV As New DataTable
dtDGV.TableName = "Weichschichtdaten"
With dtDGV.Columns
.Add("Schichtdicke", GetType(Double))
.Add("Steifemodul", GetType(Double))
.Add("Kohäsion", GetType(Double))
.Add("Scherfestigkeit", GetType(Double))
.Add("Wichte", GetType(Double))
End With
With dtDGV.Rows
.Add(dtDGV.Rows(0))
.Add(dtDGV.Rows(1))
.Add(dtDGV.Rows(2))
.Add(dtDGV.Rows(3))
.Add(dtDGV.Rows(4))
End With
Dim dgv As New DataGridView
Dim dgvD1 As New BindingSource(dtDGV, Nothing)
dgv.DataSource = dgvD1
dgv.DataMember = "Weichschichtdaten"
Dim ds As New DataSet
ds.Tables.Add(dtCombo)
ds.Tables.Add(dtTexte)
ds.Tables.Add(dtDGV)
ds.WriteXml("D:\dataset.xml", XmlWriteMode.WriteSchema) | |
Beispiel Teil 1 Formular | | | Autor: Manfred X | Datum: 14.10.14 06:19 |
| Public Class frmFormularDatenSpeichern
Const FormularFile As String = "C:\Daten\formulardaten.xml"
'Namen der Tabellen
Const Formulartexte As String = "FormularTexte"
Const Säulenraster As String = "Säulenraster"
Const Verfahren As String = "Verfahren"
Const Weichschichtdaten As String = "Weichschichtdaten"
'Zugriffsvariable für Dataset
Dim Formulardaten As DataSet
'Zugriffsvariable für Controls
Dim tbos As New List(Of TextBox)
Dim WithEvents cboVerfahren, cboSäulenraster As ComboBox
Dim WithEvents dgv As DataGridView
Dim WithEvents btnLaden, btnSpeichern As Button
'Bindingsourcen
Dim bsTexte, bsGrid As New BindingSource
Private Sub frmFormularDatenSpeichern_Load(sender As System.Object, _
e As System.EventArgs) Handles MyBase.Load
If IO.File.Exists(FormularFile) Then
'Dataset: gespeicherte Daten aus Datei laden
Formulardaten = New DataSet
Formulardaten.ReadXml(FormularFile)
Else
'Dataset neu erstellen
Formulardaten = CreateDataset()
End If
CreateControls()
CreateBindings()
Me.Height = btnLaden.Top + btnLaden.Height + 40
Me.Width = 310
End Sub
Private Sub CreateControls()
With Formulardaten.Tables(Formulartexte)
'Labels und Textboxen erstellen
For i As Integer = 0 To .Columns.Count - 3
Dim lbl As New Label With {.Parent = Me, .Top = 30 * i}
lbl.Text = .Columns(i).ColumnName
Dim tbo As New TextBox With _
{.Parent = Me, .Tag = i.ToString, _
.Left = 200, .Width = 100, .Top = 30 * i}
AddHandler tbo.KeyDown, AddressOf TextBox_KeyDown
tbos.Add(tbo)
Next i
End With
cboVerfahren = New ComboBox With _
{.Parent = Me, .Top = 30 * tbos.Count}
cboSäulenraster = New ComboBox With _
{.Parent = Me, .Top = 30 * (tbos.Count + 1)}
dgv = New DataGridView With _
{.Parent = Me, .Top = 30 * (tbos.Count + 2), _
.Width = 300, .Height = 150}
dgv.DataSource = bsGrid
btnLaden = New Button With _
{.Parent = Me, .Top = dgv.Top + dgv.Height + 10, .Text = "Laden"}
btnSpeichern = New Button With _
{.Parent = Me, .Top = dgv.Top + dgv.Height + 10, _
.Text = "Speichern", .Left = 200}
End Sub | |
Beispiel Teil 2 DataSet | | | Autor: Manfred X | Datum: 14.10.14 06:21 |
|
Private Function CreateDataset() As DataSet
Dim FormData As New DataSet
With FormData
.DataSetName = "FormularDaten"
.Tables.Add(Formulartexte)
With .Tables(0)
With .Columns
.Add("Flächenverhältnis", GetType(Double))
.Add("Säulenradius", GetType(Double))
.Add("Aktivierungsaufweitung", GetType(Double))
.Add("Dehnsteifigkeit", GetType(Double))
.Add("Belastung", GetType(Double))
.Add("Luftdruck", GetType(Double))
.Add("Ohde", GetType(Double))
.Add("Poisson", GetType(Double))
.Add("Säulenabstand", GetType(Double))
.Add("Scherfestigkeit", GetType(Double))
.Add("Wichte", GetType(Double))
.Add("Weichschicht", GetType(Double))
.Add(Säulenraster, GetType(Integer))
.Add(Verfahren, GetType(Integer))
End With
.Rows.Add(.NewRow) 'eine Zeile für Inhalt der Textboxen
.Rows(0)(Säulenraster) = 0 'Index-Voreinstellung der Combos
.Rows(0)(Verfahren) = 0
End With
'Tabellen für die Items in den Comboboxen
.Tables.Add(Säulenraster)
With .Tables(Säulenraster)
.Columns.Add(Säulenraster)
.Rows.Add("Raster1")
.Rows.Add("Raster2")
End With
.Tables.Add(Verfahren)
With .Tables(Verfahren)
.Columns.Add(Verfahren)
.Rows.Add("Verfahren1")
.Rows.Add("Verfahren2")
.Rows.Add("Verfahren3")
End With
'Spalten im Grid
.Tables.Add(Weichschichtdaten)
With .Tables(Weichschichtdaten).Columns
.Add("Schichtdicke", GetType(Double))
.Add("Steifemodul", GetType(Double))
.Add("Kohäsion", GetType(Double))
.Add("Scherfestigkeit", GetType(Double))
.Add("Wichte", GetType(Double))
End With
End With
Return FormData
End Function
End Class | |
Re: Beispiel Teil 2 DataSet | | | Autor: Gespenst | Datum: 15.10.14 21:25 |
| Hi Manfred X,
danke für den riesigen Code. Ehrlich gesagt verstehe ich davon nicht alles, aber wenn ich den bei mir übernehme, dann zeigt er mir in den nachfolgenden Subs noch Fehler an.
Private Sub frmFormularDatenSpeichern_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
If IO.File.Exists(FormularFile) Then
'Dataset: gespeicherte Daten aus Datei laden
Formulardaten = New DataSet
Formulardaten.ReadXml(FormularFile)
Else
'Dataset neu erstellen
Formulardaten = CreateDataset()
End If
CreateControls()
CreateBindings()
Me.Height = btnLaden.Top + btnLaden.Height + 40
Me.Width = 310
End Sub
Private Sub CreateControls()
With Formulardaten.Tables(Formulartexte)
'Labels und Textboxen erstellen
For i As Integer = 0 To .Columns.Count - 3
Dim lbl As New Label With {.Parent = Me, .Top = 30 * i}
lbl.Text = .Columns(i).ColumnName
Dim tbo As New TextBox With _
{.Parent = Me, .Tag = i.ToString, _
.Left = 200, .Width = 100, .Top = 30 * i}
AddHandler tbo.KeyDown, AddressOf TextBox_KeyDown
tbos.Add(tbo)
Next i
End With
cboVerfahren = New ComboBox With _
{.Parent = Me, .Top = 30 * tbos.Count}
cboSäulenraster = New ComboBox With _
{.Parent = Me, .Top = 30 * (tbos.Count + 1)}
dgv = New DataGridView With _
{.Parent = Me, .Top = 30 * (tbos.Count + 2), _
.Width = 300, .Height = 150}
dgv.DataSource = bsGrid
btnLaden = New Button With _
{.Parent = Me, .Top = dgv.Top + dgv.Height + 10, .Text = "Laden"}
btnSpeichern = New Button With _
{.Parent = Me, .Top = dgv.Top + dgv.Height + 10, _
.Text = "Speichern", .Left = 200}
End Sub Bei Me.Heigth, Me.Width und Me, meckert VB. Genauso wie bei Handles MyBase.Load.
Bin wirklich auf Hilfe angewiesen, denn ich steh da auf dem Schlauch. Ist es auch möglich, dass die Buttons nicht erstellt werden müssen? Habe 3 Buttons in meinem MenuStrip. Nämlich Speichern unter, Speichern und Öffnen.
Danke für diese riesen Hilfe | |
Re: Beispiel Teil 2 DataSet | | | Autor: Manfred X | Datum: 15.10.14 22:07 |
| Der Code bezieht sich auf ein leeres Formular.
Alle Controls werden per Code erstellt.
Die Textboxen werden in der Liste "tbos" verzeichnet.
Der Sinn der Sache ist, anhand dieser StandAlone-Anwendung
auszuprobieren und sich dabei klar zu machen, auf welche Weise
sich Formulardaten in einem Dataset abbilden lassen.
Mit Bezeichnungen wie "meckert" kann ich nichts anfangen.
Es sollten konkrete Fehlerhinweise der IDE verfügbar sein.
"Ich verstehe nicht alles" ist keine Aussage, auf
die man sinnvoll reagieren kann. Was genau ist unklar?
Beitrag wurde zuletzt am 15.10.14 um 22:13:08 editiert. | |
Re: Beispiel Teil 2 DataSet | | | Autor: Gespenst | Datum: 16.10.14 09:52 |
| Ok, danke. Für meine unpräzisen Aussagen entschuldige ich mich natürlich. Da hast du vollkommen Recht, das sollte klar definiert werden. Aber hier sind dann jetzt mal die Probleme:
Private Sub frmFormularDatenSpeichern_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
If IO.File.Exists(FormularFile) Then
'Dataset: gespeicherte Daten aus Datei laden
Formulardaten = New DataSet
Formulardaten.ReadXml(FormularFile)
Else
'Dataset neu erstellen
Formulardaten = CreateDataset()
End If
CreateControls()
CreateBindings()
Me.Height = btnLaden.Top + btnLaden.Height + 40
Me.Width = 310
End Sub In diesem Code gibt er mit die Fehler: "Das Ereignis Load wurde nicht gefunden."
"Height ist kein Member von GECCalc.GECCalc.frmFormularDatenSpeicher". und
"Width ist kein Member von GECCalc.GECCalc.frmFormularDatenSpeicher".
Im folgenden Code, gibt er mir folgende Fehler an:
Private Sub CreateControls()
With Formulardaten.Tables(Formulartexte)
'Labels und Textboxen erstellen
For i As Integer = 0 To .Columns.Count - 3
Dim lbl As New Label With {.Parent = Me, .Top = 30 * i}
lbl.Text = .Columns(i).ColumnName
Dim tbo As New TextBox With _
{.Parent = Me, .Tag = i.ToString, _
.Left = 200, .Width = 100, .Top = 30 * i}
AddHandler tbo.KeyDown, AddressOf TextBox_KeyDown
tbos.Add(tbo)
Next i
End With
cboVerfahren = New ComboBox With _
{.Parent = Me, .Top = 30 * tbos.Count}
cboSäulenraster = New ComboBox With _
{.Parent = Me, .Top = 30 * (tbos.Count + 1)}
dgv = New DataGridView With _
{.Parent = Me, .Top = 30 * (tbos.Count + 2), _
.Width = 300, .Height = 150}
dgv.DataSource = bsGrid
btnLaden = New Button With _
{.Parent = Me, .Top = dgv.Top + dgv.Height + 10, .Text = _
"Laden"}
btnSpeichern = New Button With _
{.Parent = Me, .Top = dgv.Top + dgv.Height + 10, _
.Text = "Speichern", .Left = 200}
End Sub 7x sagt mir VB "Der Wert vom Typ GECCacl.GECCacl.frmFormularDatenSpeicher kann nicht in Systems.Windows.Forms.Control konvertiert werden. | |
Re: Beispiel Teil 2 DataSet | | | Autor: Manfred X | Datum: 16.10.14 14:43 |
| Du hast kein Formular erstellt.
Schritte:
1. Im IDE-Menü:Projekt - KLASSE hinzufügen
2. Diese Klasse nennst Du: frmFormularDatenSpeichern
3. Den automatisch eingefügten Code aus der neuen Klasse löschen
4. Die drei Codeteile reinkopieren
5. Hinter die erste Codezeile "Public Class frmFormularDatenSpeichern"
fügst Du eine weitere Zeile ein: "Inherits Form"
(Damit wird auis der Klasse ein Win-Formular.)
6. Im IDE-Menü Projekt->Projekt-Eigenschaften->Startformular
stellst Du "frmFormularDatenSpeichern" ein.
Oder einfach:
Neues FORMULAR erstellen und den Code ZWISCHEN
die automatisch erstellten Zeilen
"Public Class xxxxx" und "End Class" einfügen,
wobei die erste und letzte Codezeile nicht
übernommen werden (die sind bereits vorhanden).
| |
Re: Hilfe bei Erstellung von Speichern unter und Laden. | | | Autor: Gespenst | Datum: 19.10.14 13:48 |
| Top! Vielen vielen Dank. | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
vb@rchiv CD Vol.6 vb@rchiv Vol.6
Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
Online-Update-Funktion Entwickler-Vollversionen u.v.m.Jetzt zugreifen Tipp des Monats TOP! Unser Nr. 1
Neu! sevDataGrid 3.0
Mehrspaltige Listen, mit oder ohne DB-Anbindung. Autom. Sortierung, Editieren von Spalteninhalten oder das interaktive Hinzufügen von Datenzeilen sind ebenso möglich wie das Erstellen eines Web-Reports. Weitere Infos
|