[C#]DataGridView.Rows.Clear leegt de DataGridView niet

Pagina: 1
Acties:

  • degroot
  • Registratie: December 2003
  • Niet online
Ik zit al een paar dagen met een probleempje wat ik nog steeds niet opgelost krijg.

In mijn project heb ik een DataGridView.

Deze word gevuld met gegevens uit een ArrayList.
Die ArrayList word weer gevuld door een functie uit een andere klasse.
Dat stukje code ziet er als volght uit(en werkt perfect)
C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
private void fillDataGrid1(string nodeName)
        {
            
            //retrieve all information from the xml
            getName = podList.loadName(nodeName);
            getDesc = podList.loadDesc(nodeName);
            getDate = podList.loadDate(nodeName);
            loadXml = podList.loadXml(nodeName);

            Console.WriteLine(nodeName);
            //fill the dataGridView1 on the main tab
            for (int i = 0; i < getName.Count; i++)
            {
                dataGridView1.Rows.Add();
                dataGridView1.Rows[i].Cells[0].Value = getName[i];
                dataGridView1.Rows[i].Cells[1].Value = getDesc[i];
                dataGridView1.Rows[i].Cells[3].Value = getDate[i];
            }
        }


op datzelfde form heb ik een TreeView met nodes.
Als ik op Node1 Klik , dan word de DataGridView mooi gevuld met de correcte gegevens.
Oftewel , bovenstaande code word netjes uitgevoerd.
Ik zal het event van de nodeDoubleClick ook even posten
C:
1
2
3
4
5
        private void treeView1_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e)
        {   
            string nodeName = treeView1.SelectedNode.Name;
            fillDataGrid1(nodeName);
        }


Klik ik op Node2 , dan word de functie weer herhaalt , echter natuurlijk met de waarde die aan Node2 hoort.

Dit werkt alleen niet correct.
Want zodra ik op Node2 klik , worden wel alle functies correct uitgevoerd , en alle waarde ook correct doorgegeven(gecontroleerd met Console.Writeline()) , maar het DataGridView word niet correct weergegeven.

Er komen onder de bestaande items van Node1 , de nieuwe items van Node2 te staan.

Maar dat wil ik namelijk niet.
Ik wil dat het DataGridView compleet geleegd word , zodat deze geen data van Node1 meer bevat.
Hij moet daarna alleen maar de items uit de ArrayList laten zien die gecreeerd zijn bij Node2.

De onderstaande mogelijkheden heb ik al geprobeerd , maar alles leidt tot exact hetzelfde resultaat
C:
1
2
3
4
.Rows.Delete()(met loops etc etc)
Rows.Clear()
dataGridView1.SelectAll();
dataGridView1.ClearSelection();


Als ik google , verwijzen bijna alle resultaten naar Rows.Clear , dat werkt alleen bij mij helaas niet.
Hopelijk kunnen jullie mij weer een beetje de goede richting in sturen

[ Voor 5% gewijzigd door degroot op 14-03-2007 19:34 ]

www.degroot-it.nl


  • whoami
  • Registratie: December 2000
  • Laatst online: 00:54
Wat is niet werken ?
Ik heb net ff een simpele test gedaan:
code:
1
2
3
4
5
6
7
8
9
10
11
12
private void button1_Click( object sender, EventArgs e )
{
    for( int i = 0; i < 5; i++ )
    {
        dataGridView1.Rows.Add ();
    }
}

private void button2_Click( object sender, EventArgs e )
{
      dataGridView1.Rows.Clear ();
}


werkt gewoon.

https://fgheysels.github.io/


  • degroot
  • Registratie: December 2003
  • Niet online
Ja dat dacht ik dus ook dat het zo hoorde te werken.
Maar dat doet hij helaas niet bij mij.

Als ik de Rows.Clear(); aanroep , dan maakt hij me scherm ook wel weer leeg.

Maar zodra ik de functie voor het vullen van de DataGridView aanroep , dan laat hij de waarde van de 1e keer dat ik die functie aanroep ook zien.

Hij moet hier dan alleen de waarde laten zien die gecreeerd zijn bij het aanroepen van de 2e functie.
Dus alle waarde van de 1e keer weglaten.

En ik dacht dat dat met Rows.Clear(); inderdaad zo makkelijk zou werken , maar dat pakt hij helaas niet ;(


EDIT:
Owja , voordat ik het vergeet te melden.
Ik controleer de waarde die ontwikkelt worden dmv Console.Writeline.
Zodat ik zeker weet dat bij het 2e keer aanroepen van die functie , niet de eerste waarde worden meegegeven(Waar het dus op leek omdat deze in de DataGridView terug kwamen)

Hierbij kreeg ik als resultaat dus gewoon de correcte waarde , alleen kwamen deze in mijn DataGridView terug met de 1e waarde

[ Voor 27% gewijzigd door degroot op 15-03-2007 08:40 . Reden: waknogffzeggenwilde ]

www.degroot-it.nl


  • degroot
  • Registratie: December 2003
  • Niet online
littlje kickje

www.degroot-it.nl


  • Serpie
  • Registratie: Maart 2005
  • Laatst online: 01-07-2023
rows.clear zal gewoon moeten werken, dat het bij jou niet werkt komt waarschijnlijk ergens anders door. Maar dat kunnen we niet zien in deze code die je nu geeft.

- Probeer eens alleen een clear zonder hem weer te vullen, is hij dan ook nog steeds gevuld?

Probeer anders het gedrag eventueel te reproduceren in een nieuw project, dat geeft meestal ook wel wat helderheid.

  • MTWZZ
  • Registratie: Mei 2000
  • Laatst online: 13-08-2021

MTWZZ

One life, live it!

Als je de DataGridView databind zal het niet werken en moet je de DataSource op null zetten om het grid leeg te maken.

Nu met Land Rover Series 3 en Defender 90


  • degroot
  • Registratie: December 2003
  • Niet online
Het is me gelukt , ik kreeg even een helder moment.

Ik gebruik dus ArrayLists , en die werd alleen maar bijgevuld.
Na ArrayList.Clear in het aanroepen van het begin van de functie, start hij weer met een lege ArrayList
En dus met een lege DataGridView.

Ik zit dus heel de tijd in de verkeerde hoek te zoeken!
Iig bedankt

www.degroot-it.nl


  • whoami
  • Registratie: December 2000
  • Laatst online: 00:54
Met een beetje debug-werk (stap voor stap door de code lopen, watches gebruiken), had je geen helder moment nodig gehad. ;)

https://fgheysels.github.io/


  • degroot
  • Registratie: December 2003
  • Niet online
whoami schreef op vrijdag 16 maart 2007 @ 09:21:
Met een beetje debug-werk (stap voor stap door de code lopen, watches gebruiken), had je geen helder moment nodig gehad. ;)
Als ik meestal al een lange tijd naar me code zit te kijken , word het in me hoofd net zo rommelig als me code is :9
Dus dat helder moment komt meestal pas na een aantal dagen als ik de code weer op me gemakkie bekijk

www.degroot-it.nl

Pagina: 1