Code eenvoudiger maken met FOR loop

Status
Niet open voor verdere reacties.

lonssie

Gebruiker
Lid geworden
9 okt 2007
Berichten
27
Hallo,

Om gegevens uit een datagrid te halen heb ik code gebruikt die nogal omslachtig word wanneer ik veel regels uit wil lezen.
Ik dacht dat dit misschien simpeler te maken was met een FOR loop maar dit lukt me niet helemaal.

Mijn 'oude' code:
Code:
                string Regel1 = DataGridView1.Rows[0].Cells[1].Value.ToString();

                string Regel2 = DataGridView1.Rows[1].Cells[1].Value.ToString();

                string Regel3 = DataGridView1.Rows[2].Cells[1].Value.ToString();

                string Regel4 = DataGridView1.Rows[3].Cells[1].Value.ToString();

                string Regel5 = DataGridView1.Rows[4].Cells[1].Value.ToString();

                // enz.

Zoals je ziet blijft het getal achter Cells[ ] steeds hetzelfde, maar het getal achter Rows[ ] word steeds één hoger.
Zo word ook het getal in de naam van de string steeds ééntje hoger.


Code met een FOR loop:
Code:
                int AantalRegels;

                for (int i = 1; i <= AantalRegels; i++)
                {
                    // Maak een nieuwe string met een unieke naam en haal de waarde 
                    // uit de juiste Row / Cell
                }

Kan iemand me vertellen (of op weg helpen) wat ik op de plaats van het //commentaar kan zetten?
[Edit] en of het eigenlijk wel mogelijk is om in C# om op deze manier een 'nieuwe string' te creeëren!

Alvast bedankt!
 
Laatst bewerkt:
Het is wel mogelijk...
Dan zou je gebruik kunnen maken van een String[]
Deze maak je eerst aan met een vaste lengte.. bijvoorbeeld 5.
Vervolgens doe je dan iets als:

Code:
                String[] stringArray = new String[5];

                for (int i = 1; i < stringArray.length; i++)
                {
                    string[i] = DataGridView1.Rows[i].Cells[1].Value.ToString();
                }

Ik doe dit zo even uit mijn hoofd.. mogelijk syntax fouten inbegrepen :p
 
met een grid weet je nooit precies hoeveel regels je krijgt.
foreach is daarom veiliger.
System.Collections.ArrayList is een Array, maar dan dynamisch.
handig als je niet van te voren weet hoeveel items je op wilt slaan.


Code:
using System;
using System.Data;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

using System.Collections;

public partial class _Default : System.Web.UI.Page 
{
    ArrayList list;

    protected void Page_Load(object sender, EventArgs e)
    {
        list = new ArrayList();
        foreach (GridViewRow row in GridView1.Rows)
        {
            System.Diagnostics.Debug.WriteLine("GridViewRow waarden: " + row.Cells[0].Text + " " + row.Cells[1].Text);
            list.Add(row.Cells[0].Text + " " + row.Cells[1].Text);
        }
        foreach (string regel in list)
        {
            System.Diagnostics.Debug.WriteLine("array-item:" + regel);
        }
    }
}
 
Hallo, bedankt weer voor jullie reacties.

Omdat het aantal regels in mijn datagrid inderdaad iedere keer anders is zou ik graag die foreach loop willen proberen.

Ik weet echter niet zo goed hoe ik die code moet gebruiken:

- Als ik
Code:
using System.Web.UI;
en
Code:
using System.Web.UI.WebControls;
gebruik krijg ik de error "The type or namespace name 'UI' does not exist in the namespace 'System.Web'(are you missing an assembly reerence?)

Heb ik die UI perse nodig? Zo ja, wat kan ik eraan doen om die error te voorkomen?

- Als ik die 2 regels met UI gewoon niet gebruik dan krijg ik dezelfde foutmelding weer wanneer ik
Code:
public partial class _Default : System.Web.UI.Page
gebruik, omdat daar die System.Web.UI.Page weer in voorkomt.

Mvg,
 
omdat ik gebruik maak van de arraylist, moet ik de "using Systems.Collection" toevoegen.

voor een foreach loop op zich hoef je helemaal geen using toe te voegen.

System.Web.UI is alleen nodig in web applicaties.
en public partial class _Default : System.Web.UI.Page is ook iets uit webapplicaties.

dus:

de enige wat je moet toevoegen is ( bij gebruik van ArraList):

Code:
using System.Collections;


en in de code waar jij dat wilt hebben, de code:

Code:
        ArrayList list = new ArrayList();
        foreach (GridViewRow row in GridView1.Rows)
        {
            System.Diagnostics.Debug.WriteLine("GridViewRow waarden: " + row.Cells[0].Text + " " + row.Cells[1].Text);
            list.Add(row.Cells[0].Text + " " + row.Cells[1].Text);
        }
        foreach (string regel in list)
        {
            System.Diagnostics.Debug.WriteLine("array-item:" + regel);
        }
 
Superrr!
Die code staat er in zonder errors, maar nu vraag ik mezelf af waar ik de waardes 'terug kan vinden'.

Ik heb wat meer opgezocht over die
Code:
System.Diagnostics.Debug.WriteLine

Alle oplossingen verwijzen naar een msdn site die het niet doet:

#Debug.Listeners Property
http://msdn.microsoft.com/library/en...DiagnosticsDeb

Dus misschien kan iemand me een trap in de goeie richting geven? :rolleyes:
En anders morgen maar even verder googlen :p
 
de site die het niet doet is te bereiken via:

http://msdn2.microsoft.com/en-us/library/system.diagnostics.debug.listeners.aspx

daar hebben ze het over:

Code:
public static TraceListenerCollection Listeners { get; }

en

Code:
/* Create a listener that outputs to the console screen, and 
  * add it to the debug listeners. */
 TextWriterTraceListener myWriter = new 
    TextWriterTraceListener(System.Console.Out);
 Debug.Listeners.Add(myWriter);


maar ik heb echt geen idee hoe ik hiermee waardes kan laten zien die door die foreach loop 'gemaakt' worden! Heeft misschien iemand een idee?

mvg,
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan