| |
VB.NET - Ein- und UmsteigerRe: Datagridview zeigt Daten aus Array nicht an | | | Autor: Seek1 | Datum: 13.09.16 09:59 |
| Das mit den Propertys funktioniert schon mal :-D
Leider werden die Daten nicht ins Array übertragen. | |
Datagridview zeigt Daten aus Array nicht an | | | Autor: Seek1 | Datum: 13.09.16 08:21 |
| Hallo Leute,
Habe ein Datagridview erstellt, das ich in ein Array binden möchte.
Die Variable ActivePLC kann sich aber jederzeit ändern.
Im Control habe ich Column vergeben, die ich glei wie die Strukturvaraibeln genannt habe.
(Auch beim DataPropertyName)
Nun werden zwar 3 Zeilen angezeigt, aber diese sind leer.
Trage ich etwas im Datagridview ein, so wird das nicht in das Array übernommen.
Die Strukturen sind in diesem Beispiel verklinert worde und sind normalerweise weit grösser.
Wo liegt der (Denk)Fehler ?
Public Class Form1
Public Structure TagStruct
Dim Address As String
Dim Symbol As String
Dim Description As String
Dim Type As String
End Structure
Public Structure PLCConfig
Dim Tags() As TagStruct
End Structure
Dim PLC(10) As PLCConfig
Dim ActivePLC As Integer
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles MyBase.Load
FillWithDefaults()
ActivePLC = 1
DataGridView1.DataSource = PLC(ActivePLC).Tags
DataGridView1.Update()
End Sub
Sub FillwithDefaults()
For i = 0 To 10
ReDim PLC(i).Tags(2)
For j = 0 To 2
PLC(i).Tags(j).Address = "Adresse" & j
PLC(i).Tags(j).Symbol = "Symbol " & j
PLC(i).Tags(j).Description = "Tag " & j
PLC(i).Tags(j).Type = "Type " & j
Next
Next
End Sub
End Class | |
Re: Datagridview zeigt Daten aus Array nicht an | | | Autor: Seek1 | Datum: 13.09.16 09:43 |
| Habe mal den Beitrag in einem anderen Forum auch nochmals gepostet, um das Projekt anzuhängen.
Das Array und die Datasource sind ja gefüllt :-/
https://www.mikrocontroller.net/topic/406319?goto=4717563#4717563 | |
Re: Datagridview zeigt Daten aus Array nicht an | | | Autor: Manfred X | Datum: 13.09.16 09:53 |
| Hallo!
Properties werden für Daten-Bindung benötigt.
Public Structure TagStruct
Property Address As String
Property Symbol As String
Property Description As String
Property Type As String
End Structure Deklariere Deine Laufvariablen lokal.
Verwende ggf. explizite Konvertierung: j.ToString | |
Re: Datagridview zeigt Daten aus Array nicht an | | | Autor: Manfred X | Datum: 13.09.16 10:04 |
| Dafür wird die Implementierung der
INotifyPropertyChanged-Schnittstelle
(Namespace:System.Componentmodel)
in der Structure benötigt. | |
Re: Datagridview zeigt Daten aus Array nicht an | | | Autor: Manfred X | Datum: 13.09.16 10:30 |
| Wenn Structures (Werttypen) in Arrays eingesetzt werden,
können die Werte nur als Ganzes, aber nicht einzelne Properties
modifiziert werden.
Benutze deshalb eine Klasse, statt einer Structure.
Public Class frmXXX
Public Class TagClass
Implements System.ComponentModel.INotifyPropertyChanged
Dim mAddress As String
Property Address As String
Set(value As String)
mAddress = value
RaiseEvent PropertyChanged(Me, _
New System.ComponentModel.PropertyChangedEventArgs("Address"))
End Set
Get
Return mAddress
End Get
End Property
'Properties entsprechend erweitern (s.o.)
Property Symbol As String
Property Description As String
Property Type As String
Public Event PropertyChanged(sender As Object, _
e As System.ComponentModel.PropertyChangedEventArgs) _
Implements _
System.ComponentModel.INotifyPropertyChanged.PropertyChanged
End Class
Public Structure PLCConfig
Dim Tags() As TagClass
End Structure
Dim PLC(10) As PLCConfig
Dim ActivePLC As Integer
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles MyBase.Load
FillwithDefaults()
ActivePLC = 1
datagridview1.DataSource = PLC(ActivePLC).Tags
datagridview1.Update()
End Sub
Sub FillwithDefaults()
Dim i, j As Integer
For i = 0 To 10
Array.Resize(PLC(i).Tags, 3)
For j = 0 To 2
PLC(i).Tags(j) = New TagClass
PLC(i).Tags(j).Address = "Adresse" & j.ToString
PLC(i).Tags(j).Symbol = "Symbol " & CStr(j)
PLC(i).Tags(j).Description = "Tag " & j '(s.o.)
PLC(i).Tags(j).Type = "Type " & j '(s.o.)
Next j
Next i
End Sub
End Class
Beitrag wurde zuletzt am 13.09.16 um 10:40:32 editiert. | |
Re: Datagridview zeigt Daten aus Array nicht an | | | Autor: Seek1 | Datum: 13.09.16 10:44 |
| Ich hoffe, ich habe es richtig verstanden.
Imports System.ComponentModel
Public Class Form1
Public Class TagClass
Implements System.ComponentModel.INotifyPropertyChanged
Dim mAddress As String
Property Address As String
Set(ByVal value As String)
mAddress = value
RaiseEvent PropertyChanged(Me, _
New System.ComponentModel.PropertyChangedEventArgs("Address"))
End Set
Get
Return mAddress
End Get
End Property
Dim mSymbol As String
Property Symbol As String
Set(ByVal value As String)
mSymbol = value
RaiseEvent PropertyChanged(Me, _
New System.ComponentModel.PropertyChangedEventArgs("Symbol"))
End Set
Get
Return mSymbol
End Get
End Property
Dim mDescription As String
Property Description As String
Set(ByVal value As String)
mDescription = value
RaiseEvent PropertyChanged(Me, _
New System.ComponentModel.PropertyChangedEventArgs( _
"Description"))
End Set
Get
Return mDescription
End Get
End Property
Dim mType As String
Property Type As String
Set(ByVal value As String)
mType = value
RaiseEvent PropertyChanged(Me, _
New System.ComponentModel.PropertyChangedEventArgs("Type"))
End Set
Get
Return mType
End Get
End Property
Public Event PropertyChanged(ByVal sender As Object, _
ByVal e As System.ComponentModel.PropertyChangedEventArgs) _
Implements _
System.ComponentModel.INotifyPropertyChanged.PropertyChanged
End Class
Public Structure PLCConfig
Dim Tags() As TagClass
End Structure
Dim PLC(10) As PLCConfig
Dim ActivePLC As Integer
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles MyBase.Load
FillwithDefaults()
ActivePLC = 1
DataGridView1.DataSource = PLC(ActivePLC).Tags
DataGridView1.Update()
End Sub
Sub FillwithDefaults()
For i = 0 To 10
ReDim PLC(i).Tags(2)
For j = 0 To 2
PLC(i).Tags(j).Address = "Adresse" & j
PLC(i).Tags(j).Symbol = "Symbol " & j
PLC(i).Tags(j).Description = "Tag " & j
PLC(i).Tags(j).Type = "Type " & j
Next
Next
End Sub
End Class Leider wird beim Form/Load der Code nach FillwithDefaults() nicht mehr ausgeführt.
Wird in der Schleife der befehl "PLC(i).Tags(j).Address = "Adresse" & j" abgesetzt, wird alles beendet | |
Re: Datagridview zeigt Daten aus Array nicht an | | | Autor: Manfred X | Datum: 13.09.16 11:07 |
| Schau Dir FillWithDefaults an.
Klasseninstanzen müssen per New zunächst erstellt werden.
Dieser Code fehlt bei Dir: PLC(i).Tags(j) = New TagClass
Zudem solltest Du i,j explizit deklarieren und auch
die Umwandlung der Integer-Werte in Strings explizit vornehmen. | |
Re: Datagridview zeigt Daten aus Array nicht an | | | Autor: Seek1 | Datum: 13.09.16 11:48 |
| Dankeschön :-D | |
| 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 Neu! sevCoolbar 3.0
Professionelle Toolbars im modernen Design!
Mit sevCoolbar erstellen Sie in wenigen Minuten ansprechende und moderne Toolbars und passen diese optimal an das Layout Ihrer Anwendung an (inkl. große Symbolbibliothek) - für VB und MS-Access Weitere Infos
|
|
|
Copyright ©2000-2024 vb@rchiv Dieter Otter Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.
Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel
|
|