|
Categorieën >
VB.NET
textbox databinding refresh
|
|
|
offline
|
PHP beginner
|
Ik heb een datagridview die gevuld wordt met een list(of T) elk object in die lijst bevat een aantal properties. In de datagridview toon ik enkel de belangrijkste zaken, de details worden onderaan getoond in textboxen (een soort master detail als het ware).
Om de textbox te vullen wil ik gebruikmaken van een databinding dus doe ik:
textbox.databindings.add("Text", activeobject, "propertie")
textbox.databindings.add("Text", activeobject, "propertie")
Dit werkt goed, de eerste keer... Maar als ik dan een nieuwe rij kies in de datagridview wordt de data in de textboxen niet automatisch aangepast. Is er nog iets extra dat ik moet doen om aan te tonen dat die data gewijzigd is?
Het "activeobject" in het bovenstaande voorbeeld is een private variabele die het huidige object uit de datagridview bevat, telkens als de rij veranderd, veranderd de inhoud van dit object mee, waardoor ik dacht dat dus ook de inhoud van de textboxen mee zou veranderen... |
2 antwoorden
|
|
|
|
|
|
offline
|

Crew .NET
|
Als je dan toch met objecten in een GridView werkt is het toch eenvoudiger om telkens je van rij verandert de juiste property van het object in de juiste TextBox te plaatsen. In het FormLoad event maak je 1 kolom om aan de DataGridView toe te voegen en daarin komt dan de naam. Met het CellClickEvent zorg je dan dat je die rij naar het object cast en de eigenschappen ervan zet je in de juiste TextBox.
Private lstPerson As List(Of Person) = New List(Of Person)
Private p As Person
Private Sub frmMain_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
p = new Person()
p.Naam = ...
lstPerson.Add(p)
...
'Tot er een aantal "Personen" inzitten"
gridPersons.AutoGenerateColumns = False
Dim cell = New DataGridViewTextBoxCell()
cell.Style.BackColor = Color.White
Dim col = New DataGridViewColumn()
col.CellTemplate = cell
col.HeaderText = "Voornaam"
col.DataPropertyName = "Naam"
gridPersons.Columns.Add(col)
gridPersons.DataSource = lstPerson
End Sub
Private Sub gridCellClick(ByVal sender As Object, ByVal e As DataGridViewCellEventArgs) Handles gridPersons.CellClick
If Not e.RowIndex.Equals(-1) Then
p = CType(gridPersons.Rows(e.RowIndex).DataBoundItem, Person)
txtNaam.Text = p.Naam
txtPlaats.Text = p.Plaats
txtJaar.Text = p.Jaar.ToString()
txtGeslacht.Text = p.Geslacht
End If
End Sub
Private lstPerson As List(Of Person) = New List(Of Person) Private p As Person Private Sub frmMain_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load p = new Person() p.Naam = ... lstPerson.Add(p) ... 'Tot er een aantal "Personen" inzitten" gridPersons.AutoGenerateColumns = False Dim cell = New DataGridViewTextBoxCell() cell.Style.BackColor = Color.White Dim col = New DataGridViewColumn() col.CellTemplate = cell col.HeaderText = "Voornaam" col.DataPropertyName = "Naam" gridPersons.Columns.Add(col) gridPersons.DataSource = lstPerson End Sub Private Sub gridCellClick(ByVal sender As Object, ByVal e As DataGridViewCellEventArgs) Handles gridPersons.CellClick If Not e.RowIndex.Equals(-1) Then p = CType(gridPersons.Rows(e.RowIndex).DataBoundItem, Person) txtNaam.Text = p.Naam txtPlaats.Text = p.Plaats txtJaar.Text = p.Jaar.ToString() txtGeslacht.Text = p.Geslacht End If End Sub
|
|
|
|
offline
|
PHP beginner
|
Ik heb de databinding op de textboxen nodig om omdat het object zijn state zou wijzigen als er iets wijzigd van waarde.
Voorlopig heb ik het kunnen oplossen door de databindings te clearen en opnieuw toe te voegen telkens de rij in de datagridview wijzigd.
|
Dit onderwerp is gesloten.
|
|
|