[ASP.NET / C#] index was outside the bounds of the array

Pagina: 1
Acties:

  • DinX
  • Registratie: Februari 2002
  • Laatst online: 08:58

DinX

Motormuis

Topicstarter
Ik zit hier nu al een tijdje met een vreemd probleem.

Ik zal even kort de situatie schetsen:
Ik ben een webform aan het maken, dat voor een bepaalde gebruiker de ingevulde uren (taken) van een dag laat zien in een DataGrid (grid1).
Op hetzelfde webform staat er ook een DataGrid grid2 dat de niet ingevulde uren toont (zijn er bijvoorbeeld taken ingevuld van 15.00-15.30 en 16.00-17.30, dan zal beneden 15.30-16.00) verschijnen.

De data van grid1 wordt opgehaald met behulp van een webmethod, dit werkt perfect. Deze wordt bij elke refresh van de page opnieuw opgehaald in de BindGrid() method. Ik heb het moedwillig niet in het !IsPostback gedeelte gezet, omdat elke actie op de form een refresh van de data nodig heeft (nieuwe datum, insert van nieuwe taak,...).

Na elke BindGrid() wordt FindFreeHours() uitgevoerd. Deze zal in grid1 (met z'n dataset dsCodfus) alle lege uren gaan opsporen (einduur taak1 vergelijken met beginuur taak2).

Wanneer deze FindFreeHours() method voor de 2de keer wordt opgeroepen krijg ik dus volgende error:

System.IndexOutOfRangeException: Index was outside the bounds of the array.
C#:
1
2
3
4
5
6
7
public void FindFreeHours()
{
    DataRow dr1;
    DataRow dr2;
    aantal = 0;
    dr1 = dsCodfus.Tables[0].Rows[0];
    dr2 = dsCodfus.Tables[0].Rows[dsCodfus.Tables[0].Rows.Count-1];


Het begin van de FindFreeHours() method hierboven.
De exception gebeurt bij "aantal = 0".
Comment ik die regel uit, dan verschuift de error gewoon naar de volgende regel.
Daarvoor had ik er nog een j = 0 voor staan, en toen gebeurde daar de exception.

Ik had eerst aantal lokaal gedeclareerd (dus int aantal = 0), ik heb hem nu al private gedeclareerd bovenaan, en nog altijd die fout.
Ik hoop dat iemand me wat duidelijkheid kan verschaffen :)

Marokko 2015: Route
Sat Tracker: SpotWalla
Blog: Gone for a ride


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 11:53

gorgi_19

Kruimeltjes zijn weer op :9

Ik heb het moedwillig niet in het !IsPostback gedeelte gezet, omdat elke actie op de form een refresh van de data nodig heeft (nieuwe datum, insert van nieuwe taak,...).
Die hebben niets te maken met een IsPostback in je Page_Load event. Iedere actie (toevoegen, wijzigen, etc.) wordt immers pas uitgevoerd naar je Page_Load.
Oftewel de volgorde:

Page_Load
Button_Click

Ergo: Binden van zut moet je dus doen in een aparte method, welke zowel in page_load als de losse events van de controls wordt aangeroepen.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • DinX
  • Registratie: Februari 2002
  • Laatst online: 08:58

DinX

Motormuis

Topicstarter
gorgi_19 schreef op 10 mei 2004 @ 09:39:
[...]

Die hebben niets te maken met een IsPostback in je Page_Load event. Iedere actie (toevoegen, wijzigen, etc.) wordt immers pas uitgevoerd naar je Page_Load.
Oftewel de volgorde:

Page_Load
Button_Click

Ergo: Binden van zut moet je dus doen in een aparte method, welke zowel in page_load als de losse events van de controls wordt aangeroepen.
Heb ik nu gedaan.
Maar de oorzaak van de exception ligt toch ergens anders.
Het gebeurt dus pas bij de 2de keer dat FindFreeHours() wordt opgeroepen (gebeurt enkel wanneer dsCodfus meer dan 0 rows heeft).
Dagen waar nog niks ingevuld is (en dsCodfus dus geen rijen bevat) kan ik gewoon doorblladeren (dus van dag naar dag verderklikken). Het is pas wanneer ik voor de 2de keer een dag tegenkom waar al uren waren (en FindFreeHours() wordt opgeroepen) dat de fout gebeurt

Mijn BindGrid() btw:

C#:
1
2
3
4
5
6
7
private void BindGrid()
{
    dsCodfus = cfs.getCfData("5",huidigeDatum.ToShortDateString());
    Application["dsCodfus"] = dsCodfus;
    grid1.DataSource = dsCodfus.Tables[0].DefaultView;
    grid1.DataBind();
}


Maar die doet het dus gewoon, want elke keer als ik van datum verander, dan geeft hij de juiste records voor die dag.

UPDATE: de fout die ik daar kreeg kwam waarschijnlijk door een verkeerd gebruik van aantal ergens verder in de method. Wel vaag dat hij de fout dan niet op de plaats in kwestie aangaf.

[ Voor 26% gewijzigd door DinX op 10-05-2004 10:09 ]

Marokko 2015: Route
Sat Tracker: SpotWalla
Blog: Gone for a ride


  • Riegstar
  • Registratie: Februari 2003
  • Niet online

Riegstar

Wadapatja!

De vaut kan hier liggen:
code:
1
2
3
4
5
6
7
8
9
dr2 = dsCodfus.Tables[0].Rows[dsCodfus.Tables[0].Rows.Count-1];

als

dsCodfus.Tables[0].Rows.Count == 0;

dan:

dsCodfus.Tables[0].Rows[0-1]; // -1 is dus ongeldige index