| |
VB.NET - Ein- und UmsteigerDataGridView und XML | | | Autor: stefanbla80 | Datum: 16.10.13 06:53 |
| Hallo zusammen,
stoße immer wieder an Grenzen und komme somit nicht weiter.
Was ich brauche ist ein DataGridView, welches die Daten aus einer XML bekommt und dort auch wieder rein schreibt. Diese Funktionen habe ich meines erachtens relativ weit.
Mein Problem ist, dass ich auch noch eine ComboBox pro Zeile brauche. Diese Daten aus der ComboBox bekomme ich nicht in das DataSet.
Habt Ihr hier ein allgemeines Übungsbeispiel für meine Frage.
Grüße
Stefan | |
Re: DataGridView und XML | | | Autor: Manfred X | Datum: 16.10.13 09:36 |
| Hallo!
Ich verstehe Deine Frage so, daß Deine Datensätze
aus einigen Spalten bestehen, die in im Datagridview
(gebundene Datatable) vom User verwaltet werden.
Eine dieser Spalten soll als ComboBoxColumn im
Grid erscheinen.
In dem Fall ist die AutoGenerateColumns-Eigenschaft des
Grid auf "false" zu setzen, die Grid-Spalten sind per Code
zu erstellen und den Datenspalten zuzuordnen.
http://www.vbarchiv.net/forum/read.php?f=22&t=87266&i=87277
Beitrag wurde zuletzt am 16.10.13 um 09:37:22 editiert. | |
Re: DataGridView und XML | | | Autor: stefanbla80 | Datum: 16.10.13 09:55 |
| Hallo Manfred,
was ich machen möchte: Ich würde gerne unsere ExcelTabelle mit Mehrfachnutzung ablösen.
Diese Tabelle hat pro user ein Tabellenblatt und stellt den täglichen Arbeitsvorrat jeder Person dar.
Hier werden Projektnummern eingetragen, Statusmeldungen erstellt usw. Die Tabelle wird stark frequentiert, wir oft gespeichert und "lebt" einfach.
Was oftmals ein Problem darstellt, da wir doch so 10 - 15 user sind.
Die Grundidee ist, das ganze in VB.net zu machen - also mit DataGridView die Inhalte anzeigen und die Daten in einer XML speichern. (Hoffe das geht auch so mit der Mehrfachnutzung)
Genau wie Du beschrieben hast besteht die "Tabelle" aus einzelnen Zellen (wie Excel). Jeder in der Tabelle verwaltete Projekt hat eine Zeile. Und in dieser Zeile kann auch eine ComboBox stehen bzw. diese soll definiert z. B. in Spalte 4 sein.
Den Inhalt dieser ComboBox würde ich auch gerne im selben Dataset/DataTable hinterlegen.
Das alles sollte dann in XML gespeichert werden.
Grüße
Stefan | |
Re: DataGridView und XML | | | Autor: Manfred X | Datum: 16.10.13 10:19 |
| Falls mehrere Benutzer gleichzeitig lesend und schreibend
auf den Datenbestand zugreifen wollen, wird eine
"richtige" multiuserfähige Datenbank erforderlich
(z.B. SQL Server [Express]).
| |
Re: DataGridView und XML | | | Autor: stefanbla80 | Datum: 16.10.13 10:26 |
| Naja, gleichzeitig ist die Frage. Im dümmsten Fall ja, jedoch sind das ja Zugriffzeiten im (Milli-)Sekundenbereich, oder?!
Denke das könnte doch trotzdem klappen, oder?! Mit so ner Art Abfrage ob die XML "verfügbar" ist und dann anschließend mit so ner Art "Refresh" der DataGrids ...
Kann solch eine Datenbank mit VB.net erstellt werden. Was brauche ich dazu?!
| |
Re: DataGridView und XML | | | Autor: Manfred X | Datum: 16.10.13 10:37 |
| Eine XML-Datei ist eine simple Textdatei, deren
Inhalt aber gemäß XML-Spezifikation erstellt worden ist.
Man kann sie in den verschiedenen Sperrmodi öffnen, d.h.
immer nur ein USER gleichzeitig hat Schreib-Zugriff auf
die gesamten Daten.
| |
Re: DataGridView und XML | | | Autor: stefanbla80 | Datum: 16.10.13 10:39 |
| Das klingt ja gut!!
Hast Du mir ein einfaches Beispiel für die Einbindung der ComboBoxen?!
Evtl. mit XML-Idee (oder wird die "automatisch" erstellt?!) | |
Re: DataGridView und XML | | | Autor: Manfred X | Datum: 16.10.13 10:43 |
| Welche Fragen ergeben sich zu dem
- wie ich glaube: einfachen - Beispiel,
das ich oben verlinkt habe?
Wie eine Datatable gefüllt wird (Code/XML/Datenbank)
spielt für die Erstellung und Zuordnung der
Grid-Spaltenobjekte keine Rolle.
| |
Re: DataGridView und XML | | | Autor: stefanbla80 | Datum: 16.10.13 11:32 |
| Hallo Manfred,
also ganz verstehen tue ich das nicht.
Vereinfacht ausgedrückt:
Das sind die Überschriften, die im DataGridView als Header stehen sollen
Firma Kundennummer Projektnummer
Über ein weiteres Formular möchte ich den Inhalt von TextBoxen eintragen, zeilenweise.
Drücke ich den Button, wird der Inhalt von TextBox1 z. B. in Spalte1/Zeile1 (Firma) geschrieben. TextBox2 in Spalte2/Zeile1 (Kundennummer).
Diese Einträge sollen dann gespeichert werden. In z. B. Spalte 4 sollen fortlaufend ComboBoxen eingefügt werden. Diese Spalte dient rein zum auswählen verschiedener Möglichkeiten. | |
Re: DataGridView und XML | | | Autor: stefanbla80 | Datum: 16.10.13 12:08 |
| Habe das mal so versucht.
Aber in das Dataset werden die Werte nicht übernommen.
Public ds As New DataSet
Public dt_BLAS As New DataTable("DataTable_BLAS")
Public dt_SLND As New DataTable("DataTable_SLND")
Public Sub ComboBoxDGV_einfügen_BLAS()
With dt_BLAS
.Columns.Add("Country", GetType(String))
.Columns.Add("Company", GetType(String))
.Columns.Add("Debitor", GetType(String))
End With
With Form_PlanningGuide.DataGridView_BLAS
.AutoGenerateColumns = True
'Bindung
.DataSource = dt_BLAS
'For i As Integer = 0 To dt_BLAS.Columns.Count - 1
For i As Integer = 2 To 2
'neue ComboBoxColumn erstellen
Dim cbc As New DataGridViewComboBoxColumn
'einrichten
With cbc
'.DataPropertyName = dt_BLAS.Columns(i).ColumnName
.DisplayStyleForCurrentCellOnly = True
.DefaultCellStyle.Font = New Drawing.Font("Arial", 14)
.HeaderText = "Funktion/Status"
'Werte in Comboliste (die Werte in der Datenspalte
'müssen in Liste enthalten sein)
'If i = 0 Then .Items.AddRange("a", "b", "c", "d")
.Items.AddRange("a", "b", "c", "d")
'If i = 1 Then .Items.AddRange(1, 2, 3, 4, 5, 6, 7)
'Alternative z.B.
'.DisplayMember = .DataPropertyName
'.DataSource = dt_BLAS
End With
'Spalte anhängen
.Columns.Add(cbc)
Next i
End With
With dt_BLAS
.Columns.Add("SP6", GetType(String))
' .Columns.Add("SP7", GetType(String))
End With
End Sub | |
Re: DataGridView und XML | | | Autor: Manfred X | Datum: 16.10.13 12:38 |
| Im Beispiel wird die Datei komplett für Schreibzugriffe gesperrt.
Grid-Spalten müssen für alle anzuzeigenden Daten-Spalten
erstellt werden.
Public Class frmTest
Dim dgv As New DataGridView With {.Parent = Me, .Top = 50, .Width = 400}
Dim WithEvents btnload As New Button With _
{.Parent = Me, .Text = "Laden"}
Dim WithEvents btnSave As New Button With _
{.Parent = Me, .Text = "Speichern", .Left = 150, .Enabled = False}
Dim dt As New DataTable
Dim filestream As IO.FileStream
Const xmldaten As String = "C:\daten\demo.xml"
Private Sub CreateData()
With dt
.TableName = "testdaten"
.Columns.Add("Firma")
.Columns.Add("Kundennummer")
.Columns.Add("Optionen")
.Rows.Add("MotorenMaxe", "123-4567", "Express")
.Rows.Add("GetriebeGünther", "123-4567", "Normal")
.Rows.Add("SchmierölEddi", "456-789", "Reduziert")
End With
dt.WriteXml(xmldaten, XmlWriteMode.WriteSchema)
End Sub
Private Sub frmTest_Load(sender As System.Object, _
e As System.EventArgs) Handles MyBase.Load
Me.Width = 500
If Not IO.File.Exists(xmldaten) Then CreateData()
With dgv
.AutoGenerateColumns = False
'Gridspalten erstellen
.Columns.Add(New DataGridViewTextBoxColumn)
.Columns.Add(New DataGridViewTextBoxColumn)
.Columns.Add(New DataGridViewComboBoxColumn)
'Combobox-Optionen definieren
CType(.Columns(2), DataGridViewComboBoxColumn). _
Items.AddRange("Express", "Normal", "Reduziert")
End With
End Sub
Private Sub btnload_Click(sender As Object, _
e As System.EventArgs) Handles btnload.Click
Try
dt.Clear()
filestream = IO.File.Open(xmldaten, IO.FileMode.Open, _
IO.FileAccess.ReadWrite, IO.FileShare.Read)
dt.ReadXml(filestream)
dgv.DataSource = dt
'Zuordnung der Tablespalten zu den Gridspalten
For c As Integer = 0 To 2
dgv.Columns(c).DataPropertyName = _
dt.Columns(c).ColumnName
Next c
btnSave.Enabled = True
btnload.Enabled = False
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
Private Sub btnSave_Click(sender As Object, _
e As System.EventArgs) Handles btnSave.Click
Try
filestream.Close()
dt.WriteXml(xmldaten, XmlWriteMode.WriteSchema)
btnSave.Enabled = False : btnload.Enabled = True
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
End Class | |
Re: DataGridView und XML | | | Autor: stefanbla80 | Datum: 16.10.13 13:00 |
| Hallo Manfred,
also Du meinst, dass man dann die Mehrfachnutzung so in der Art hinbekommen könnte?!
Muss mir das nachher mal genauer anschauen.
Wenn das geht gut, sonst brauch ich da gar nicht weiter machen ... | |
Re: DataGridView und XML | | | Autor: Manfred X | Datum: 16.10.13 13:07 |
|
Ich kenne die Nutzungs-Anforderungen nicht.
Über einen geöffneten "Filestream" kannst Du per "FileShare"
festlegen, daß nachfolgende Zugiffe nur noch die aktuell
gespeicherten Daten zum Lesen verfügbar machen können ("FileAccess.Read")
Andere Zugriffs-Versuche scheitern mit der Ausnahme-Meldung,
daß bereits ein Prozess auf die Datei zugreift.
| |
Re: DataGridView und XML | | | Autor: stefanbla80 | Datum: 16.10.13 13:12 |
| mmmh, und das hast Dú in Deinem Beispiel gemacht?!
Die Nutzungsanforderungen sind die ähnlichen wie bei Excel mit Mehrfachnutzung.
Also User A nutzt zwar vorrangig sein TabPage mit seiner DataGrid, User B eigentlich vorrangig nur seine.
Trotzdem sollten die Daten wie bei Mehrfachnutzung "synchronisiert" werden. Dass die XML immer auf dem neuesten Stand ist und das Tool ansich ja auch.
Gut bei Excel muss man auch speichern um zu aktualisieren ... | |
Re: DataGridView und XML | | | Autor: Manfred X | Datum: 16.10.13 13:19 |
| Wie bereits mehrfach gepostet:
Alles was über eine temporäre, globale Dateisperre hinausgeht,
(Synchronisierung, partielle Datensatz-Sperre o.ä.) erfordert
zwingend die Verwendung einer entsprechenden Datenbank.
In meinem Beispiel ist nur der Schreibzugriff implementiert.
Man kann zusätzlich einen Button einbauen, der den Lesezugriff
anfordert und in dessen Click-Eventhandler der "FileAccess.Read"
beim "Open" verwendet wird.
| |
Re: DataGridView und XML | | | Autor: stefanbla80 | Datum: 16.10.13 13:26 |
| Also wieder totales Neuland.
Braucht man zur Datenbankerstellung irgendwelches "Equipment"?!
Schön wäre, wenn es mit der bisher darstellten Lösung und XML funktionieren würden.
Bei Excel werden doch die Änderungen von User1 auch nur übernommen wenn ich speichere, oder?!
Dann müssen die User halt nach Änderungen immer Speichern.
| |
Re: DataGridView und XML | | | Autor: stefanbla80 | Datum: 16.10.13 13:45 |
| Das klingt ja alles gut was in dem Link steht.
Jedoch brauche ich hierzu weitere Software/Entwicklungsumgebung neben VB.net.
Ich habe Visual Studio 2010 | |
Re: DataGridView und XML | | | Autor: stefanbla80 | Datum: 16.10.13 15:18 |
| Versuche grad zu installieren.
Erstmal sind Updates für Visual Studio 2010 fällig.
Wie gehts dann weiter. Brauche ich SQL dann nur um eine Datenbank aufzubauen in die dann mein Tool etwas schreibt.
Wo liegen nachher die Daten der Datenbank. Reicht hierzu ein normales "Gruppenlaufwerk"?! | |
Re: DataGridView und XML | | | Autor: Manfred X | Datum: 16.10.13 15:38 |
| SQL Server ist - wie der Name sagt - serverbasiert.
Die Datenbankfiles werden über die Dienste der SQLEngine
angelegt und verwaltet. Am einfachsten geht die Einrichtung
über das SQL-Management Studio.
Der Zugriff aus VB.Net erfolgt durch die ADO.Net-Klassen
(in System.Data.SqlClient). Beispiele im ADO-Forum.
Es gibt dafür auch Hilfsmittel in Visual Studio (Menü: Daten).
Einarbeitung in die Materie ist freilich dennoch erforderlich.
| |
Re: DataGridView und XML | | | Autor: stefanbla80 | Datum: 17.10.13 06:50 |
| Guten morgen zusammen,
nochmals einem Frage hierzu: Wäre einbe Access Datenbank dafür geeignet?!
Denke das wäre für mich der einfachste Weg für die Realisierung, da ich das Server Thema nicht überblicken kann und sicher auch kein Platz auf einem Server "einfordern" kann.
Bei Access stelle ich mir vor, dass ich nachher eine Datei habe in der ich meine Daten hinterlegen kann. Wird hier dann die Mehrfachnutzung funktionieren?!
Grüße
Stefan | |
Re: DataGridView und XML | | | Autor: Franki | Datum: 17.10.13 07:27 |
| Hallo Stefan,
eine Access Datenbank ist auch nur eine einfache Datei und es kann Probleme im Multiuser Betrieb geben. Das ist zwar mit der von dir angesprochenen Anzahl von Usern machbar, aber wenn das Thema Datenbank/ADO.NET für dich Neuland ist und dich da sowieso einarbeiten mußt, ist der SQL Server(Express) die bessere Wahl.
Gruß
Frank
| |
Multiuser-XML | | | Autor: Manfred X | Datum: 17.10.13 09:47 |
| Ein Verhindern des Überschreibens der Änderungen anderer
Nutzer könnte man durch einen Datenabgleich beim Speichern
realisieren.
Grob getestet !!!!
Public Class frmXML_Multiuser
Dim xmldaten As String = "C:\daten\demo_multi.xml"
Dim WithEvents btnload As New Button With _
{.Parent = Me, .Text = "Laden"}
Dim WithEvents btnSave As New Button With _
{.Parent = Me, .Text = "Speichern", .Left = 100}
Dim dgv As New DataGridView With _
{.Parent = Me, .Top = 50, .Width = 600, _
.AllowUserToDeleteRows = False}
Dim dt As New DataTable
Private Sub CreateData()
With dt
.TableName = "testdaten"
.Columns.Add("Firma")
.Columns.Add("Kundennummer")
.Columns.Add("Optionen")
.Rows.Add("MotorenMaxe", "123-4567", "Express")
.Rows.Add("GetriebeGünther", "123-5678", "Normal")
.Rows.Add("SchmierölEddi", "456-789", "Reduziert")
.PrimaryKey = {.Columns("Kundennummer")}
End With
dt.WriteXml(xmldaten, XmlWriteMode.WriteSchema)
End Sub
Private Sub btnload_Click(sender As Object, _
e As System.EventArgs) Handles btnload.Click
Try
dt.Clear()
dt.ReadXml(xmldaten)
dt.AcceptChanges()
dgv.DataSource = dt
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
Private Sub btnSave_Click(sender As Object, _
e As System.EventArgs) Handles btnSave.Click
Try
If Not writexmltofile() Then
If MsgBox("Änderungen konnten nicht gespeichert werden." & _
vbCrLf & _
"Trotzdem speichern?", _
MsgBoxStyle.Exclamation Or MsgBoxStyle.OkCancel) = _
MsgBoxResult.Cancel Then Exit Sub
dt.WriteXml(xmldaten, 0) 'Kollegen-Änderungen überschreiben
End If
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
Public Function writexmltofile() As Boolean
'aktuelle Daten neu lesen und sperren
Dim fs As IO.FileStream = IO.File.Open(xmldaten, _
IO.FileMode.Open, IO.FileAccess.ReadWrite, IO.FileShare.Read)
Dim dt_current As New DataTable
dt_current.ReadXml(fs)
'aktuelle Daten abgleichen
With dt_current
If .Columns.Count <> dt.Columns.Count Then Return False
For c As Integer = 0 To .Columns.Count - 1
If Not dt.Columns.IndexOf(.Columns(c).ColumnName) = c Then
fs.Close() 'Spaltenschema inzwischen geändert
Return False
End If
Next c
Dim pcn As String = dt.PrimaryKey(0).ColumnName
For r As Integer = 0 To .Rows.Count - 1
Dim row_user As DataRow = _
dt.Rows.Find(.Rows(r)(pcn))
If row_user IsNot Nothing Then
For c As Integer = 0 To .Columns.Count - 1
Dim cc As Integer = _
dt.Columns.IndexOf(.Columns(c).ColumnName)
If Not .Rows(r)(c).Equals _
(row_user(cc, DataRowVersion.Original)) Then
fs.Close() 'Zeileninhalt inzwischen extern geändert
Return False
End If
If Not row_user.RowState = DataRowState.Unchanged Then
'geänderten Wert in frisch geladene Table übertragen
.Rows(r)(c) = row_user(cc, DataRowVersion.Current)
End If
Next c
Else
fs.Close() : Return False 'Schlüssel geändert oder
'inzwischen neue Zeile erstellt
End If
Next r
For r As Integer = 0 To dt.Rows.Count - 1
If dt.Rows(r).RowState = DataRowState.Added Then
.Rows.Add(dt.Rows(r).ItemArray) 'neu erstellte Zeile anfügen
End If
Next r
fs.Close()
.WriteXml(xmldaten, XmlWriteMode.WriteSchema)
dt.AcceptChanges()
End With
Return True
End Function
Private Sub frmXML_Multiuser_Load(sender As Object, _
e As System.EventArgs) Handles Me.Load
If Not IO.File.Exists(xmldaten) Then CreateData()
End Sub
End Class
Beitrag wurde zuletzt am 17.10.13 um 10:07:14 editiert. | |
Re: DataGridView und XML | | | Autor: stefanbla80 | Datum: 17.10.13 10:16 |
| Hallo zusammen, schön dass die Diskussion weiter geht.
Bin froh, dass Ihr Euch so bemüht, egal wie es nachher ausgeht - vielen vielen Danke hierfür.
Werde den Vorschlag von Manfred mit einem Kollegen testen.
So allgemein ist Multiuser ja klar.
Szenario
1. User 1 öffnet das Tool
2. User 2 öffnet das Tool
3. User 1 ändert etwas in seinem DataGridView und speichert
4. User 2: Wie bekommt dieser die Änderungen mit
Hier muss ja ständig „geladen“ werden um einen Abgleich zu schaffen, oder.
User 2 hat ja noch nicht gespeichert oder sonst was.
So ganz überblicke ich es grad noch nicht. | |
Re: DataGridView und XML | | | Autor: Manfred X | Datum: 17.10.13 10:19 |
| In meinem Beispiel kriegt der User2 beim Speicherversuch mit,
daß er seine Änderungen nicht speichern kann.
Man könnte User2 ergänzend anzeigen, welche Daten
in welchen Zeilen inzwischen "extern" geändert worden sind.
| |
Re: DataGridView und XML | | | Autor: stefanbla80 | Datum: 17.10.13 10:26 |
| ok, und wann kann User 2 dann speichern?!
Er muss dann erst laden und dann seine Einträge machen und dann gleich danach speichern?!
Es macht ja keinen Sinn jede Sekunde z. B. zu laden. Dann kann ich ja nie meine Einträge machen.
Das heißt dass ich Änderungen nur mitbekommen wenn ich Speichern will. | |
Re: DataGridView und XML | | | Autor: FZelle (Moderator) | Datum: 17.10.13 10:34 |
| Und diesen ganzen Blödsinn könntest Du dir sparen wenn du es per Sql Server implementierst.
| |
Re: DataGridView und XML | | | Autor: Manfred X | Datum: 17.10.13 10:35 |
| "User2" darf zunächst nicht speichern, es sei denn
er will die zwischenzeitlichen Änderungen seiner Kollegen
überschreiben.
Folgende Codeverbesserung ist wohl noch möglich ...
If Not row_user.RowState = DataRowState.Unchanged Then
If Not .Rows(r)(c).Equals(row_user(cc, DataRowVersion.Original)) Then
fs.Close() 'Zeileninhalt ist inzwischen extern geändert worden
Return False
End If
'geänderten Wert in frisch geladene Table übertragen
.Rows(r)(c) = row_user(cc, DataRowVersion.Current)
End If Extern modifizierte Zeilen, die aktuelle Änderungen nicht betreffen
sperren nicht den Speichervorgang.
Eventuell nach dem Speichern ein Reload durchführen ....
MfG
Manfred
Beitrag wurde zuletzt am 17.10.13 um 10:48:56 editiert. | |
Re: DataGridView und XML | | | Autor: Manfred X | Datum: 17.10.13 10:44 |
| Nunja
Wenn es nur um die Verwaltung eines relativ kleinen Datenbestandes
geht, und im Netz ansonsten kein Datenbank-Server benötigt wird,
wäre SQL-Server als Lösung evt. übertrieben .....
| |
Re: DataGridView und XML | | | Autor: stefanbla80 | Datum: 17.10.13 10:51 |
| mmmh, ich weiß auch nicht wo die Reise hin führt.
Werde das heute nachmittag mal versuchen zu testen.
Mal sehen wie weit ich/wir kommen.
Ich melde ich wieder | |
Re: DataGridView und XML | | | Autor: Manfred X | Datum: 17.10.13 11:07 |
| Schnell ist XML (Text) nur, wenn der Datenbestand ein
überschaubares Vorlumen besitzt.
Einen automatischen Abgleich halte ich für problematisch,
wenn ein zwischenzeitlich extern geänderter Datensatz durch
den aktiven User erneut geändert werden soll, (der die
"aktuelle" Datenlage bei der Durchführung seiner Modifikationen
noch gar nicht kannte).
| |
Re: DataGridView und XML | | | Autor: stefanbla80 | Datum: 17.10.13 11:09 |
| Also ich teste grad ganz einfach mit zwei geöffneten Tools.
Die Funktionen ähneln denen von Excel. Ist natürlich noch etwas zu optimieren, jedoch finde ich diesen Weg nicht wirklich schlecht.
Muss das genaue testen, jedoch scheint es prinzipiell zu gehen.
| |
Re: DataGridView und XML | | | Autor: Manfred X | Datum: 17.10.13 11:16 |
| Mein Vorschlag wäre, die betroffenen Datensätze zunächst in eine
Table zu schreiben, die betroffenen Spalten (externe Werte) zu
markieren und diese Table dem Benutzer zusätzlich anzuzeigen
(statt speichern).
| |
Re: DataGridView und XML | | | Autor: stefanbla80 | Datum: 17.10.13 11:53 |
| Das klingt doch alles sehr vielversprechend.
Manfred, hast Du noch die Muse Deinen Code zu optmieren?!
Du bist da jetzt extrem tief drinnen ...
Zum Thema schnell: was das genau bedeutet wird sich erst im Laufe der Zeit rausstellen, auf jeden Fall ist die Liste fortlaufend und kann auch mal größer werden ...
Die Spalte Kundennummer z. B.: Hier muss keine Abfrage erfolgen, da diese Nummer auch öfters auftauchen kann. | |
Re: DataGridView und XML | | | Autor: Manfred X | Datum: 17.10.13 12:32 |
| Vorsicht!
Die Kundennummer ist im Beispiel als PrimaryKey (Schlüssel) definiert.
In einer Table ist die Reihenfolge der Datensätze nicht zwingend festgelegt.
Deshalb wird für die Satz-Korrespondenz der gelesenen Datei-Inhalte eine
Spalte benötigt, deren Inhalt für jeden Datensatz eindeutig ist (UNIQUE)
und die auch nicht nachträglich geändert wird.
Falls die Kundennummer mehrfach auftauchen kann, mußt Du in den Tabellen
jeweils eine weitere Spalte anlegen, die dann als Schlüssel fungiert.
Wie Deine Prüfung genau aussehen muß, hängt von den Konsistenzbedingungen
der Daten ab. Die können auf den Ebenen: Tabelle, Satzgruppe, Einzelsatz,
oder Einzelzelle (evt. sogar Spalte(ngruppe)) gegeben sein.
(Konsistenz z.B. auf Tabellenebene bedeutet: Bereits eine ungeeignet modifizierte
Zelle macht die gesamte Tabelle unbrauchbar!)
Wie groß kann die Liste werden?
Ich würde eine Testdatei in dieser Größe erstellen und prüfen, wie effizient
sie noch bearbeitet werden kann.
Du kannst den Datensatz aufgliedern in zwei Teile (=zwei Tabellen), wobei
die Satz-Schlüssel in beiden Tabellen jeweils den gleichen PrimaryKey-Wert
erhalten (1:1). Die erste Tabelle enthält Spalten, die häufig aktualisiert werden,
die zweite die Angaben, die nur selten angefasst werden müssen.
Beitrag wurde zuletzt am 17.10.13 um 12:48:54 editiert. | |
Re: DataGridView und XML | | | Autor: stefanbla80 | Datum: 17.10.13 13:13 |
| Puuuh, hä?!
Zusammengefasst verstehe ich nur Bahnhof bzw. mir kommt das spanisch vor ...
Im Tool soll nachher ein TabControl mit sagen wir 10 Pages sein. Jede dieser Pages erhält ein DataGridView - also sehr ähnlich wie die Tabellenblätter in Excel.
Es könnten nachher so ca. 20 Spalten werden. Zeile bis zu 500 würde ich sagen.
Und das dann pro User/DataGrid. Also schon ne Menge, oder?!
| |
Re: DataGridView und XML | | | Autor: Manfred X | Datum: 17.10.13 13:41 |
| Dieses Datenvolumen benötigt geschätzt beim vollständigen Laden/Speichern
in ein Dataset ca. 1-2 Sekunden. Das ist noch machbar.
Zur Konsistenz:
Angenommen der langsame User1 ändert in der Zeile m
den Wert in der Spalte x.
Während er dies tut ändert aber der schnelle User2 in
der Zeile m den Wert in der Spalte y.
Ist Konsistenz auf Ebene der Einzelspalte definiert, kann man die
Änderung des Users1 speichern, weil beide Änderungen in verschiedenen
Spalten vorgenommen worden sind.
Ist Konsistenz auf Zeilenebene definiert, kann man die Änderung von
User1 nicht speichern, weil User2 die Zeile inzwischen modifiziert
hat und die Änderung von User1 eventuell zur geänderten Zeile nicht
mehr paßt. User1 muß statt dessen beim Versuch zu speichern über die
Änderung durch User2 informiert werden, damit er reagieren kann.
| |
Re: DataGridView und XML | | | Autor: stefanbla80 | Datum: 17.10.13 13:50 |
| Konsistenz: Aha, kann man verstehen.
Ist die Konsistenzbedingung für beide Deiner beschriebenen Abfragen möglich.
Wie Du schreibst, wenn nur z. B. die einzelne Spalte betroffen ist wäre das kein Problem.
Für die Zeilen ja, da jede Zeile ein neues Projekt bedeutet.
Die Tabelle generell soll unseren Arbeitsvorrat aufzeigen.
Pro Zeile gibt es ein Kundenprojekt - deshalb kann auch die Kundennummer mehrmals vorkommen.
| |
Re: DataGridView und XML | | | Autor: Manfred X | Datum: 17.10.13 14:02 |
| In Deinem Fall wäre vermutlich die Projekt-Nummer der Primärschlüssel der Tabelle(n).
Definieren und Programmieren kann man jede beliebige Konsistenz-Überprüfung, die
in sich logisch schlüssig ist.
| |
Re: DataGridView und XML | | | Autor: stefanbla80 | Datum: 17.10.13 14:24 |
| Also eigentlich sollte es keine Einschränkung in den Eingaben geben.
Es kann gut sein, dass ich ein Projekt von vor paar Monaten mir nochmals ganz unten anstelle - warum auch immer.
Würde ja so nicht gehen ...
Von mir aus kann eine fortlaufende Nummer 1 ....XXX der Schlüssel sein, falls man einen braucht.
Konsistenz: Weiß nicht wie Excel das macht. Wie gesagt, die Zeile definiert das ganze Projekt und solle meines Erachtens "führend" sein.
Hast Du hier Ideen im Hinterkopf?! | |
Re: DataGridView und XML | | | Autor: Manfred X | Datum: 17.10.13 14:37 |
| Die Spalte mit dem Zeilenschlüssel muß nicht die Abfolge der
Datensätze im Grid definieren. Sie dient nur zur Identifikation
eines Satzes für den Abgleich z.B. mit anderen Tabellen
(Relationen per ForeignKeyConstraint etc.) oder beim Speichern.
Um einen Projekt-Datensatz neu einzusortieren, kannst Du z.B. eine
Spalte "Bearbeitungsdatum/letzter Zugriff o.ä." einführen.
Wenn ein "altes" Projekt neu angefasst wird, trägst Du in dieser Spalte
das aktuelle Datum ein. Im Grid können die Zeilen nach den Angaben
in dieser Spalte sortiert angezeigt werden.
| |
Re: DataGridView und XML | | | Autor: stefanbla80 | Datum: 17.10.13 14:52 |
| mmmh, also brauchen wir diese "Pseudospalte" für die Identifikation auf jeden Fall.
Bearbeitungsdatum ist nicht gut, es können auch mehrere Projekt an einem Tag laufen.
Ich finde die fortlaufende Nummer beginnend bei 1 bis "unendlich" eigentlich ganz gut und eindeutig. Evtl. kann man diese auch ausblenden.
Die Tabellen dienen bei uns zum Erstellen von Mail, Kommunikation mit anderen Abteilungen, Statusabfrage des Projektstandes usw. Das läuft bisher alles im Excel.
Hast Du zu dieser Sache noch Beispiele?!
| |
Re: DataGridView und XML | | | Autor: Manfred X | Datum: 17.10.13 15:35 |
| Mir ist die Struktur Deiner Daten nicht wirklich klar.
Meines Erachtens solltest Du eine Tabelle anlegen, in die
die Basisdaten jedes Projekts eingetragen werden, z.B.
- Projektnummer = Schlüssel
- Kundennummer
- Kontaktdaten Kunde (Anschrift, Kontonummer, Mail etc.)
- Projektbeschreibung
- Projektziel
- Datum Auftragserteilung
- Geplante Projektdauer
- zugeordnete Arbeitsgruppe (Leiter)
- .......
Die Angaben in dieser Tabelle ändern sich selten.
In einer zweiten Tabelle stehen die aktuellen Informationen,
die regelmäßig aktualisiert werden müssen, z.B.
- Projektnummer (Schlüssel)
- Projektstand / aktueller Zwischenbericht
- zugeordnete Summe Arbeitsstunden
- offene Kundenanfrage(n)
- Termin/Themen nächste Besprechung (Kunde)
- Termin/Themen nächste Besprechung (Team)
- .....
Eventuell gibt es noch weitere Tabellen, die
über Schlüssel-Zuordnungen mit den Projekt-Tabellen
dynamisch verknüpft werden
- Liste der Ressourcen (Material, Anlagen)
- Liste der Mitarbeiter / Arbeitsgruppen
- Stunden-Abrechnungen
- Zahlungsflüsse
- u.v.a.
Kurzum: Der Inhalt Deiner Excel-Tabellen muß in eine für Deine
Zwecke geeignete relationale Struktur umgesetzt werden.
Warum willst Du von den Excel-Tabellen weg?
Welche Engpässe bzw. Limitierungen sind aufgetreten?
Beitrag wurde zuletzt am 17.10.13 um 15:44:19 editiert. | |
Re: DataGridView und XML | | | Autor: FZelle (Moderator) | Datum: 17.10.13 15:56 |
| Wirklich?
Dann hast du weder jemals eine MS SqlServer Express im netzwerk installiert noch wirklich damit gearbeitet.
| |
Re: DataGridView und XML | | | Autor: FZelle (Moderator) | Datum: 17.10.13 15:57 |
| Aber viel einfacher als 99% der Entwickler es sich vorstellen. | |
Re: DataGridView und XML | | | Autor: Manfred X | Datum: 17.10.13 16:48 |
| Hallo!
SQL Server Express hatte ich ganz oben im Thread längst vorgeschlagen.
Dein Post bezog sich auf den SQL Server.
| |
Re: DataGridView und XML | | | Autor: ErfinderDesRades | Datum: 18.10.13 16:51 |
| typisiertes Dataset scheint hier iwie unbekannt zu sein?
weil damit kann man mit Leichtigkeit ein DGV mit ComboboxColumns ausrüsten. guggemol vier Views Videos:
http://www.vb-paradise.de/allgemeines/tipps-tricks-und-tutorials/datenbanken/94955-die-vier-views-auf-video/#post798777
(Rechtschreibfehler urheberrechtlich geschützt) | |
Re: DataGridView und XML | | | Autor: ErfinderDesRades | Datum: 18.10.13 20:51 |
| Also auf die Unterstellung, die du nicht machen willst, mussich doch nochmal eingehen - ich zitiere sie zunächst:
DaveS schrieb:
Zitat: | | Nun, ich möchte dir nicht unterstellen hauptsächlich Besucher auf deinen Beitrag im anderen Forum lenken zu wollen | |
Entschuldigung, dassich das Tut auf einer anneren Site veröffentlichte als auf vb@.
Ums klarzustellen: Es ist nicht mein Interesse, diesem Forum User abzuwerben. Mein Interesse war einzig, eine in ihrer Mächtigkeit viel zu wenig bekannte Technologie näher zu bringen, wos grade passend schien.
Das Tut ist relevant für die 3 Fragen im Eingangspost, und deshalb habich drauf verlinkt - und nicht aus den (nicht?) unterstellten Gründen.
Für seine Qualität und inhaltliche Relevanz für diesen Thread ists doch egal, wo es veröffentlicht ist.
Nicht relevant ist es für die hier später aufkommende Problematik konkurrierender Zugriffe, aber ich habe ja auf den Eingangspost geantwortet.
Wenn bei letzterem Problem sich herausstellt, dass von Xml abgegangen werden soll, dann ist das Tut für die erste Frage nicht mehr relevant, aber noch immer für die beiden Fragen zur DatagridViewComboboxColumn.
(Rechtschreibfehler urheberrechtlich geschützt) | |
Re: DataGridView und XML | | | Autor: Manfred X | Datum: 18.10.13 20:59 |
| Hallo!
Wenn Du auf Fragen reagierst, zu denen bereits Antworten
gegeben worden sind, solltest Du Dich auf diese Antworten auch
beziehen und deutlich machen, inwiefern Deine Vorschläge
vorteilhafter sind für die Lösung des behandelten Problems.
Anderenfalls stiftest Du eher Verwirrung als daß eine Diskussion
in Gang kommt.
| |
| 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 |
|
|
sevZIP40 Pro DLL
Zippen und Unzippen wie die Profis!
Mit nur wenigen Zeilen Code statten Sie Ihre Anwendungen ab sofort mit schnellen Zip- und Unzip-Funktionen aus. Hierbei lassen sich entweder einzelnen Dateien oder auch gesamte Ordner zippen bzw. entpacken. Weitere InfosTipp des Monats März 2024 Dieter OtterUTF-8 Konvertierung von Dateien und StringsVB6 selbst verfügt über keine Funktionen zur UTF-8 Konvertierung von Daten. Mit Hilfe des ADODB.Stream-Objekts lassen sich diese fehlenden Funktionen aber schnell nachrüsten. TOP Entwickler-Paket
TOP-Preis!!
Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1605.50 EUR...
Jetzt nur 599,00 EURWeitere Infos
|