Het project
In een listview laad ik gegevens uit een SQL server tabel. Deze zijn te refreshen met een button.
Door een extra form kunnen de gegevens gedetaileerder getoond worden. OP dat form zit een button waarmee de regel verwijderd kan worden.
Wat werkt wel / niet
Wel: Listview vullen, refreshen. Extra form openen en button delete uitvoeren. De regel wordt dan ook verwijderd.
Niet: Listview refreshen na de gedelete regel
Stukken uit code
Class om listview te vullen:
Class om regel te deleten:
Probleem
Zoals ik al zei, lukt het allemaal prima om een rij de verwijderen en om opnieuw de DisplayLocktable() aan te spreken. Alleen leest hij niet opnieuw de gegevens in de listView.
Als ik de knop refresh gebruik, werkt het prima, maar als ik het via DeleteRow() doe, dan doet hij het niet.
De MessageBox die de melding "Er zijn geen gebruikers in deze tabel." geeft, verschijnt gewoon op mijn scherm. Dus de rij is verwijderd en er zijn geen gegevens meer in de tabel. Alleen blijft die rij wel op mijn scherm staan.
Wat ik zelf al heb geprobeerd...
Het verschuiven van het "moment" waarop ik de lijst refresh. Aanroepen vanuit de Delete class, aanroepen op het moment dat het extra form sluit, aanroepen vanuit dat extra form, etc.
Extra MessageBoxes tussen de code om te zien of daadwerkelijk alles wel nagelopen wordt als ik DisplayLocktable() aanspreek. En dat is zo.
Een focus gezet op de listview voordat ik hem refresh... ik ben lost.
Vraag
Hoe kan ik ook daadwerkelijk zichtbaar mijn listview opnieuw vullen? Achter de schermen gebeurd het dus blijkbaar wel. (moet ik mijn code misschien ergens laten "sleepen"?)
In een listview laad ik gegevens uit een SQL server tabel. Deze zijn te refreshen met een button.
Door een extra form kunnen de gegevens gedetaileerder getoond worden. OP dat form zit een button waarmee de regel verwijderd kan worden.
Wat werkt wel / niet
Wel: Listview vullen, refreshen. Extra form openen en button delete uitvoeren. De regel wordt dan ook verwijderd.
Niet: Listview refreshen na de gedelete regel
Stukken uit code
Class om listview te vullen:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
| public void DisplayLockTable() { SqlConnection myConnection = new SqlConnection("..."); // open connection try { SqlDataReader myReader = null; SqlCommand myCommand = new SqlCommand("SELECT ...", myConnection); myReader = myCommand.ExecuteReader(); listView2.Items.Clear(); ListViewItem lv2Item = new ListViewItem(); int i = 1; while (myReader.Read()) { lv2Item = listView2.Items.Add(""); ... // Listview vullen } if (listView2.Items.Count == 0) { MessageBox.Show("Er zijn geen gebruikers in deze tabel.", "PCMLOCKTABLE", MessageBoxButtons.OK, MessageBoxIcon.Information) == DialogResult.OK); [s][/s] } if (button4.Text == "Open...") { button4.Text = "Refresh"; } } catch { ErrorHandler eH = new ErrorHandler(1004, 100); eH.printError(); } // Close connection } |
Class om regel te deleten:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
| public class DeleteRow : Form1 { private string keywaarde; // Constructor public DeleteRow(string keywaarde) { this.keywaarde = keywaarde; } // Method public void DeleteUserRow() { SqlConnection myConnection = new SqlConnection("..."); // Open connection try { SqlCommand myCommand = new SqlCommand("DELETE ...", myConnection); myCommand.ExecuteNonQuery(); DisplayLockTable(); <--- om opnieuw de listview te vullen (refreshen dus) // Close connection } catch (Exception eR) { MessageBox.Show(eR.ToString()); ErrorHandler eH = new ErrorHandler(1005, 100); eH.printError(); } } } |
Probleem
Zoals ik al zei, lukt het allemaal prima om een rij de verwijderen en om opnieuw de DisplayLocktable() aan te spreken. Alleen leest hij niet opnieuw de gegevens in de listView.
Als ik de knop refresh gebruik, werkt het prima, maar als ik het via DeleteRow() doe, dan doet hij het niet.
De MessageBox die de melding "Er zijn geen gebruikers in deze tabel." geeft, verschijnt gewoon op mijn scherm. Dus de rij is verwijderd en er zijn geen gegevens meer in de tabel. Alleen blijft die rij wel op mijn scherm staan.
Wat ik zelf al heb geprobeerd...
Het verschuiven van het "moment" waarop ik de lijst refresh. Aanroepen vanuit de Delete class, aanroepen op het moment dat het extra form sluit, aanroepen vanuit dat extra form, etc.
Extra MessageBoxes tussen de code om te zien of daadwerkelijk alles wel nagelopen wordt als ik DisplayLocktable() aanspreek. En dat is zo.
Een focus gezet op de listview voordat ik hem refresh... ik ben lost.
Vraag
Hoe kan ik ook daadwerkelijk zichtbaar mijn listview opnieuw vullen? Achter de schermen gebeurd het dus blijkbaar wel. (moet ik mijn code misschien ergens laten "sleepen"?)