DataGridView - variable Anzahl an Instanzen generieren

19/05/2010 - 14:38 von Johann | Report spam
In „myPanel“ generiere ich mehrere identische, nebeneinander stehende
DataGridViews (dgvKATKZ1, dgvKATKZ2, …) mit den Eigenschaften von dgvKATKZ0

„Anzahl“ kann unterschiedlich sein.

For i=1 to Anzahl
Dim dgv As new DataGridView

dgv.Name = "dgvKATKZ" & i
dgv.Size = dgvKATKZ0.Size
dgv.Location = New Point(3 + i * dgvKATKZ0.Width,
dgvKATKZ0.Location.y)
dgv.ColumnCount = dgvKATKZ0.ColumnCount '3
dgv.ColumnHeadersDefaultCellStyle
=dgvKATKZ0.ColumnHeadersDefaultCellStyle
dgv.ColumnHeadersHeight =dgvKATKZ0.ColumnHeadersHeight

dgv.Columns(0).Name = "NF"
dgv.Columns(0).Width = dgvKATKZ0.Columns(0).Width '25
dgv.Columns(0).DefaultCellStyle.Font = dgvKATKZ0.Font


dgv.Columns(1).Name = "Bedarf"
dgv.Columns(1).Width = dgvKATKZ0.Columns(1).Width '42
dgv.Columns(1).DefaultCellStyle.Font = dgvKATKZ0.Font


dgv.Columns(2).Name = "RT%"
dgv.Columns(2).Width = dgvKATKZ0.Columns(2).Width '28
dgv.Columns(2).DefaultCellStyle.Font = dgvKATKZ0.Font


dgv.RowHeadersWidth = dgvKATKZ0.RowHeadersWidth '23
dgv.Width = dgvKATKZ0.Width '120



myPanel.Controls.Add(dgv)
next

Obwohl ich bei jedem Ablauf eine neue „dgv“ Instanz bilde und dgvKATKZ1, …
benenne (dgv.Name=“dgvKATKZ“ & i ) habe ich keine Instanzen dgvKATKZ1,
dgvKATKZ2, …, die ich ansprechen könnte.
Ein Versuch
Dim dgv(i) As new DataGridView
zu definieren bringt einen
Fehler: Arrays können nicht mit New deklariert werden

Fragen:
1. Was mach ich falsch?
2. Ich möchte jeder von den DataGridViews assynchron mit komplizierten
Abfragen (Grupierungen, ...) füttern.
Ist das der Gute weg?

Danke
Johann
 

Lesen sie die antworten

#1 Peter Götz
19/05/2010 - 18:05 | Warnen spam
Hallo Johann,

In "myPanel" generiere ich mehrere identische, nebeneinander stehende
DataGridViews (dgvKATKZ1, dgvKATKZ2, .) mit den Eigenschaften von
dgvKATKZ0

"Anzahl" kann unterschiedlich sein.

For i=1 to Anzahl
Dim dgv As new DataGridView

dgv.Name = "dgvKATKZ" & i
dgv.Size = dgvKATKZ0.Size
dgv.Location = New Point(3 + i * dgvKATKZ0.Width,
dgvKATKZ0.Location.y)
dgv.ColumnCount = dgvKATKZ0.ColumnCount '3
dgv.ColumnHeadersDefaultCellStyle
=dgvKATKZ0.ColumnHeadersDefaultCellStyle
dgv.ColumnHeadersHeight =dgvKATKZ0.ColumnHeadersHeight

dgv.Columns(0).Name = "NF"
dgv.Columns(0).Width = dgvKATKZ0.Columns(0).Width '25
dgv.Columns(0).DefaultCellStyle.Font = dgvKATKZ0.Font


dgv.Columns(1).Name = "Bedarf"
dgv.Columns(1).Width = dgvKATKZ0.Columns(1).Width '42
dgv.Columns(1).DefaultCellStyle.Font = dgvKATKZ0.Font


dgv.Columns(2).Name = "RT%"
dgv.Columns(2).Width = dgvKATKZ0.Columns(2).Width '28
dgv.Columns(2).DefaultCellStyle.Font = dgvKATKZ0.Font


dgv.RowHeadersWidth = dgvKATKZ0.RowHeadersWidth '23
dgv.Width = dgvKATKZ0.Width '120



myPanel.Controls.Add(dgv)
next

Obwohl ich bei jedem Ablauf eine neue "dgv" Instanz bilde
und dgvKATKZ1, . benenne (dgv.Name="dgvKATKZ" & i )
habe ich keine Instanzen dgvKATKZ1,
dgvKATKZ2, ., die ich ansprechen könnte.



Was sagt denn

myPanel.Controls.Count?

und was bekommst Du mit

Dim DGVNames As String = ""
Dim C As Control

For Each C In myPanel.Controls
If TypeOf (C) Is DataGridView Then
If DGVNames.Length > 0 Then
DGVNames &= ControlChars.CrLf
End If
DGVNames &= C.Name
End If
Next
MsgBox(DGVNames, MsgBoxStyle.Information)

in der MsgBox angezeigt?


Ein Versuch
Dim dgv(i) As new DataGridView
zu definieren bringt einen
Fehler: Arrays können nicht mit New deklariert werden



Die Fehlermeldung sagt eigentlich schon alles.

Hier ein Beispiel bei dem 4 DataGridView-Controls
in einem Panel erzeugt werden.
Nach dem Programmstart mal auf die DGVs klicken.

' /// Code in einem leeren Formmodul (Form1.vb)
Public Class Form1
Private Panel1 As Panel

Private Sub Form1_Load _
(ByVal sender As System.Object, _
ByVal e As System.EventArgs _
) Handles MyBase.Load

Dim R As Rectangle = _
Screen.GetWorkingArea(Me)

Me.SetBounds _
(R.Left + 30, _
R.Top + 30, _
R.Width - 60, _
R.Height - 60)

Panel1 = New Panel

Panel1.SetBounds _
(10, 10, _
Me.ClientSize.Width - 20, _
Me.ClientSize.Height - 20)

Panel1.BorderStyle = BorderStyle.Fixed3D

Panel1.Anchor = _
AnchorStyles.Left Or _
AnchorStyles.Top Or _
AnchorStyles.Right Or _
AnchorStyles.Bottom

Me.Controls.Add(Panel1)

CreateDataGridViews(4)
End Sub

Private Sub CreateDataGridViews _
(ByVal Number As Integer)

Dim Left As Integer = 30
Dim Top As Integer = 10
Dim DGV As DataGridView

For i = 1 To Number
DGV = New DataGridView
With DGV
.Name = "DGV" & i.ToString

.SetBounds _
(Left, _
Top, _
Panel1.Width - Left * 2, _
150)

.DefaultCellStyle.Font = _
New Font("Arial", 12)

.ColumnHeadersDefaultCellStyle.Font = _
New Font("Arial", 8, FontStyle.Bold)

.Columns.Add("ID", "ID")

.Columns.Add("Text1", "Text1")

.Columns.Add("Text2", "Text2")

.Anchor = _
AnchorStyles.Left Or _
AnchorStyles.Top Or _
AnchorStyles.Right

Top = .Bottom + 10
End With

Panel1.Controls.Add(DGV)

AddHandler _
DGV.Click, AddressOf DGV_Click
'
' hier weitere EventHandler anfügen.
'
Next
End Sub

Private Sub DGV_Click _
(ByVal sender As Object, _
ByVal e As System.EventArgs)

MsgBox _
(DirectCast(sender, DataGridView).Name, _
MsgBoxStyle.Information)

End Sub
End Class
' \\\ E N T E


Mehr zum DataGridView findest Du unter

www.gssg.de -> Visual Basic -> VB.net
-> DataGridView


Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen)

Ähnliche fragen