| |
VB.NET - Ein- und UmsteigerZellen einer DGV mit Auswahllisten versehen | | | Autor: woha | Datum: 12.10.20 16:43 |
| Hallo!
nachdem ich nun schon einige Zeit daran herum tüftle, suche und probiere, aber leider zu keiner Lösung gefunden habe, möchte ich Euch um einen Hinweis zu folgender Problemstellung bitte:
Situation:
ich habe eine DataGridView, die ich aus einer DataTable fülle.
Dabei werden in jeder Zeile Informationen aus einer Datei eingelesen, die ich nun (in einer einzigen Werte Spalte) ändern möchte.
Für manche Zeile (rows) könnte es nun Auswahllisten geben, die einem das wiederholte Tippen der selben Texte ersparen sollte, aber trotzdem die Möglichkeit gibt, einen eigenen Text frei in das Textfeld zu schreiben.
D.h. wie kann ich elegant sowohl eine einfache Texteingabe als auch eine - vermutlich - Comboboxliste für ein und die selbe Spalte erlauben?
Und wie lege ich die Auswahllisten am besten fest.
Ich würde sie gerne direkt aus einer XML Datei einlesen, denn diese hätte ich ohnehin, da sie die Einstellungen und Parameter der DataTable/DatGridView definiert.
PS.: bin beim Thema DGV und vb.net noch eher am Anfang, daher schon vorab ein Dankeschön für Eure Geduld und Euer Verständnis, bei dieser vermutlich lapidaren Fragestellung!
Ich denke, es fehlt mir der kleine aber feine Tipp, der mich hier wieder weiter bringt.
DANKE!
mfg
Wolfgang | |
Re: Zellen einer DGV mit Auswahllisten versehen | | | Autor: woha | Datum: 12.10.20 18:27 |
| Hallo effeff,
Danke schon für Deine ersten Antworten.
D.h. es gibt keine Möglichkeit, sowohl eine Liste als auch freien Text zu benutzen?
Und wie müsste man die DataTable für die Benutzung eines LookUps umgestalten?
Momentan definiere ich ja nur meine gewünschten Columns, und dann lese ich die rows entsprechend aus den Eigenschaften meiner Datei ein.
Wären die LookUps (Combo Boxen) dann einfach in einer andere DT?
Und - wenn dies möglich wäre - wie würde kurz der Code aussehen um die Combo Lookup an die Spalte zu hängen?
Nur die Spalte als DataGridComboColumn definieren?
Wobei, ohne Möglichkeit in einem Großteil der Zellen freien Text zu schreiben, wird es nicht hilfreicher.
Danke
mfg
Wolfgang | |
Re: Zellen einer DGV mit Auswahllisten versehen | | | Autor: effeff | Datum: 12.10.20 20:18 |
| //D.h. es gibt keine Möglichkeit, sowohl eine Liste als auch freien Text zu benutzen?//
Das macht keinen Sinn. Um das zu verdeutlichen:
Du hast normalerweise eine DataTable1, Z. B. mit einem ganz einfachen Inhalt:
ID, Nachname, DienstAmWochentag
Alle Spalten sind vom Typ Integer, ID ist Primärschlüssel.
Dann hast Du eine DataTable2, z. B. mit diesem Inhalt:
ID, Nachname
ID ist Integer und Primärschlüssel, Nachname ist varchar(50).
Als letztes hast Du eine DataTable3 mit Inhalt:
ID, Wochentag
ID ist wieder Integer, Wochentag ist varchar(10).
Es geht hierbei um einen ganz einfachen Dienstplan. Es soll in einem DataGridview einfach nur eine Auslistung erscheinen, wer an welchem Wochentag Dienst hat.
Nehmen wir an, dass die DataTable2 folgende gefüllt ist:
1, Müller
2, Schmidt
3, Meier
Nehmen wir an, dass die DataTable3 wie folgt gefüllt ist:
1, Montag
2, Dienstag
3, Mittwoch
4, Donnerstag
5, Freitag
6, Samstag
7, Sonntag
Du würdest jetzt in dem DataGridView die Spalte 2 als ComboBoxSpalte definieren, die als Liste die Namen der DataTable2 beinhaltet. Als Spalte 3 würdest Du eine ComboBoxSpalte definieren, die als Liste die Wochentagsnamen aus der DataTable3 beinhaltet. Die ValueMember wären also die IDs, die DisplayMember wären also die Nachname bzw. die Wochentagsnamen. Als Werte für die DataTable1 werden also nur die IDs übergeben. Verstehst Du das Prinzip? Das nennt sich relationale Datenhaltung.
EALA FREYA FRESENA | |
Re: Zellen einer DGV mit Auswahllisten versehen | | | Autor: effeff | Datum: 12.10.20 21:22 |
| Du willst meiner Meinung nach nur Werte aus einer ComboBox in Deine DataTable übernehmen. Dazu würde sich eine zweite Form anbieten, die nur eine ComboBox mit Inhalt und einen Button hat. Du würdest im DataGridView den MouseButton abfragen, und wenn dieses der rechte ist und die gewünschte Spalte ausgewählt ist, die Form2 anzeigen lassen. Nach dem Beenden der Form2 würde der Inhalt dann in die DataGridView-Zelle unter der Maus eingetragen werden:
Public Class Form1
Dim dtWochenplan As DataTable
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
dtDatenInitialisieren()
DataGridView1Initialisieren()
End Sub
Private Sub dtDatenInitialisieren()
dtWochenplan = New DataTable
dtWochenplan.TableName = "Wochenplan"
Dim keys(1) As DataColumn
Dim column As New DataColumn
column.DataType = System.Type.GetType("System.Int32")
With column
.ColumnName = "ID"
.AutoIncrement = True
.AutoIncrementStep = 1
End With
dtWochenplan.Columns.Add(column)
keys(0) = column
dtWochenplan.PrimaryKey = keys
column = New DataColumn
column.DataType = System.Type.GetType("System.String")
column.ColumnName = "Name"
dtWochenplan.Columns.Add(column)
column = New DataColumn
column.DataType = System.Type.GetType("System.String")
column.ColumnName = "Tag"
dtWochenplan.Columns.Add(column)
End Sub
Private Sub DataGridView1Initialisieren()
With DataGridView1
.DataSource = dtWochenplan
.ReadOnly = False
.AllowUserToAddRows = True
.AllowUserToDeleteRows = False
.SelectionMode = DataGridViewSelectionMode.FullRowSelect
.MultiSelect = False
.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill
.ScrollBars = ScrollBars.Both
.RowsDefaultCellStyle.BackColor = Color.White
.AlternatingRowsDefaultCellStyle.BackColor = Color.AliceBlue
End With
End Sub
Private Sub DataGridView1_CellMouseDown(sender As Object, e As _
DataGridViewCellMouseEventArgs) Handles DataGridView1.CellMouseDown
c = e.ColumnIndex
r = e.RowIndex
End Sub
Dim r As Integer = 0
Dim c As Integer = 0
Private Sub DataGridView1_MouseClick(sender As Object, e As MouseEventArgs) _
Handles DataGridView1.MouseClick
If e.Button = MouseButtons.Left Or c <> 1 Then
Exit Sub
End If
DataGridView1.CurrentCell = DataGridView1(c, r)
DataGridView1.BeginEdit(True)
Dim MouseLeft As Integer = MousePosition.X
Dim MouseTop As Integer = MousePosition.Y
Dim f2 As New Form2
f2.StartPosition = FormStartPosition.Manual
f2.Left = MouseLeft
f2.Top = MouseTop
f2.ShowDialog()
Dim Rueckgabe As String = f2.Nachname
DataGridView1.CurrentCell.Value = Rueckgabe
DataGridView1.EndEdit(True)
End Sub
End Class Public Class Form2
Public Nachname As String
Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
With ComboBox1
.Items.Add("Müller")
.Items.Add("Schmidt")
.Items.Add("Meier")
End With
End Sub
Private Sub btnOK_Click(sender As Object, e As EventArgs) Handles _
btnOK.Click
Nachname = ComboBox1.Text
Me.Close()
End Sub
End Class EALA FREYA FRESENA | |
Re: Zellen einer DGV mit Auswahllisten versehen | | | Autor: woha | Datum: 13.10.20 08:32 |
| Hallo effeff,
super und ein recht herzliches Dankeschön für Deinen Hinweis.
Ich hatte schon befürchtet, dass es in diese Richtung gehen muss (hatte dies in meinen alten vb6 Programmen für MSFlexGrids ähnlich gelöst), dachte aber, dass die neuen Controls doch irgendwie einen eleganteren Weg anbieten könnten.
Ich werde, mir Dein Beispiel im Detail ansehen (habe sofort ein paar tolle Hinweise und Tricks gesehen);
und melde mich, sobald ich es einigermaßen umgesetzt habe.
Ich denke, für die Listeninhalte wäre ein extra XML File besser geeignet, das ich dann gleich gesamt via ReadXML in ein Dataset einlesen werde.
Bis dahin dann schon ein nochmaliges DANKE
mfg
Wolfgang | |
| 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 |
|
|
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 InfosTipp des Monats Access-Tools Vol.1
Über 400 MByte Inhalt
Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB
Nur 24,95 EURWeitere Infos
|