Avatar billede bobber Nybegynder
21. august 2006 - 13:33 Der er 45 kommentarer og
1 løsning

hjælp til There is no row at position

Hejsa,

Dette er på en webform.

Jeg oplever denne fejl, "There is no row at position 30. (IndexOutOfRangeException)"
når jeg prøver at fylde en række med datoer, når der ikke er 31 dage i en måned (der er 31 tablecells)

Nogen som har et bud om hvordan jeg kan skrive mig ud af det, da
det er en webform ,hvor man bladrer 1 måned frem eller tilbage hvor de så bliver udfyldt med datoer for indeværende måned, så hvis der er mindre en 31 dage i måneden, skal tablecell indholdet bare være blank.

Her er min kode som indsætter daoterne fra dataset som indeholder alle datoer.

for (int i = 0; i < 31; i++)
        {
            Table2.Rows[1].Cells[4 + i].Text = dataset.SpShowMonthDays[i].date.ToString("dd");
        }
Avatar billede Slettet bruger
21. august 2006 - 13:39 #1
Skriv i < dataset.SpShowMonthDays.Length (eller Count()) i stedet for i<31
Avatar billede bobber Nybegynder
21. august 2006 - 14:08 #2
Jeg har ikke muligheden for at vælge hverken Length eller Count
Avatar billede dr_chaos Nybegynder
21. august 2006 - 14:14 #3
prøv med


for (int i = 0; i < DateTime.DaysInMonth(DateTime.Now.Year,DateTime.Now.Month); i++)
        {
            Table2.Rows[1].Cells[4 + i].Text = dataset.SpShowMonthDays[i].date.ToString("dd");
        }
Avatar billede bobber Nybegynder
21. august 2006 - 14:20 #4
får stadig fejlen: There is no row at position 30. (IndexOutOfRangeException)
Avatar billede dr_chaos Nybegynder
21. august 2006 - 14:22 #5
er det i dataset.SpShowMonthDays[i].date.ToString("dd"); du får fejlen ?
Avatar billede bobber Nybegynder
21. august 2006 - 14:36 #6
ja den smider den her

dataset.SpShowMonthDays[i].date    'dataset.SpShowMonthDays[i]' threw an exception of type 'System.IndexOutOfRangeException'    System.DateTime {System.IndexOutOfRangeException}
{"There is no row at position 30."}    System.SystemException {System.IndexOutOfRangeException}
Avatar billede dr_chaos Nybegynder
21. august 2006 - 14:38 #7
returnerer dataset.SpShowMonthDays[i] noget data ?
Avatar billede bobber Nybegynder
21. august 2006 - 14:45 #8
ja, jeg kan debugge hele vejen igennem til den 30 i måneden, så hvis jeg står på juni, så kommer fejlen når i = 30 f.eks står jeg i juli eller august, viser den det fint nok.

Fra debug log:
Table2.Rows[1].Cells[4 + i].Text    "31"    string
dataset.SpShowMonthDays[i].date    'dataset.SpShowMonthDays[i]' threw an exception of type 'System.IndexOutOfRangeException'    System.DateTime {System.IndexOutOfRangeException}
i    30    int


Så spørgsmålet er hvordan jeg får den til at smide blank i den celle som normalt ville have 31 stående, og f.eks i februar skal den smdie blank i celle 29-30-31, da der jo som regel er 28 dage i februar.
Avatar billede dr_chaos Nybegynder
21. august 2006 - 20:39 #9
husker du at ændre DateTime.Now.Month til det tal som repræsenterer måneden altså 5 for maj måned?
Avatar billede Slettet bruger
21. august 2006 - 21:57 #10
DateTime dag = dataset.SpShowMonthDays[0].date;
for (int i = 0; i < (dag.Year, dag.Month); i++)
        {
            Table2.Rows[1].Cells[4 + i].Text = dataset.SpShowMonthDays[i].date.ToString("dd");
        }
Avatar billede bobber Nybegynder
21. august 2006 - 22:48 #11
Det er alle sammen rigtig gode bud, og tror også jeg tæt på en løsning, men kan ikke lige få den sidste du skrev til at virke(sandbox)

og chaos, ja jeg får vist de måneder med 31 dage fint nok og kan bladre imellem dem uden fejlen, det bare så snart jeg når en måned med 30 dage eller mindre at jeg på den.
Avatar billede Slettet bruger
21. august 2006 - 23:07 #12
Ja, jeg kom til at klippe for meget væk:

DateTime dag = dataset.SpShowMonthDays[0].date;
for (int i = 0; i < Datetime.DaysInMonth(dag.Year, dag.Month); i++)
        {
            Table2.Rows[1].Cells[4 + i].Text = dataset.SpShowMonthDays[i].date.ToString("dd");
        }
Avatar billede bobber Nybegynder
22. august 2006 - 08:40 #13
Okey får stadig samme fejl There is no row at position 30

Øv
Avatar billede dr_chaos Nybegynder
22. august 2006 - 08:50 #14
prøv at tjekke denne her værdi om den skifter til 30 når der kun er 30 dage i måneden:
Datetime.DaysInMonth(dag.Year, dag.Month)
Avatar billede bobber Nybegynder
22. august 2006 - 09:27 #15
i = 30 når måneden indeholder 30 dage og i = 31 når måneden indeholder 31 dage

Mit skema ser sådan her ud http://www.devzone.dk/skema.JPG

Det er en webform, med en tabel som indeholder det antal tablecells jeg skal bruge.
som viser timer for den respektive dato.
Avatar billede bobber Nybegynder
22. august 2006 - 11:02 #16
er det måske en try catch hvor jeg fanger min expection der og så laver en tom row istedet måske
Avatar billede dr_chaos Nybegynder
22. august 2006 - 11:12 #17
prøv lige med for at sikre at den ændre månede osv som den skal.:
DateTime dag = dataset.SpShowMonthDays[0].date;
REsponse.write dataset.SpShowMonthDays[0].date;
for (int i = 0; i < Datetime.DaysInMonth(dag.Year, dag.Month); i++)
        {
            Response.write dataset.SpShowMonthDays[i].date;
        }
Avatar billede bobber Nybegynder
22. august 2006 - 11:18 #18
Det gør den, men kan fejlen være  der hvor jeg laver mit tabel index, altså at det er for lille.
Avatar billede dr_chaos Nybegynder
22. august 2006 - 11:39 #19
det er ikke umuligt .
Avatar billede bobber Nybegynder
22. august 2006 - 13:01 #20
nææ det heller ikke problemet.
Avatar billede dr_chaos Nybegynder
22. august 2006 - 13:22 #21
gav den nogen fejl da du afviklede det som jeg skrev kl
11:12:58 ?
Avatar billede bobber Nybegynder
22. august 2006 - 13:42 #22
Den skriv fint datoerne ud for de måneder som havde 31 dage i toppen af siden, men stadig fejl når jeg kom til en måned med 30 dage eller mindre
Avatar billede dr_chaos Nybegynder
22. august 2006 - 13:48 #23
hvad er værdien af Datetime.DaysInMonth(dag.Year, dag.Month);
når du vælger en måned med 30 dage
Avatar billede bobber Nybegynder
22. august 2006 - 13:52 #24
i = 30 når måneden indeholder 30 dage og i = 31 når måneden indeholder 31 dage
Avatar billede bobber Nybegynder
22. august 2006 - 13:54 #25
når fejlen med "there is no row at position 30 opstår" bliver jeg henvist her til

[System.Diagnostics.DebuggerNonUserCodeAttribute()] public SpShowMonthDaysRow this[int index] { get { return ((SpShowMonthDaysRow)(this.Rows[index])); } }
Avatar billede dr_chaos Nybegynder
22. august 2006 - 13:56 #26
prøv lige med for (int i = 0; i < Datetime.DaysInMonth(dag.Year, dag.Month)-1; i++)
Avatar billede bobber Nybegynder
22. august 2006 - 14:09 #27
hmm så viser den kun op til d. 30 for de måneder med 31 dage i tablecells, men fejler stadig på de måneder med 30 dage i.
Avatar billede dr_chaos Nybegynder
22. august 2006 - 14:18 #28
du bliver nok nødt til at kigge på din SpShowMonthDaysRow funktion og hvad den laver.
Der er meget som kunne tyde på at fejlen ligger der
Avatar billede bobber Nybegynder
22. august 2006 - 14:30 #29
okey, kan ikke lige se nogen fejl i min ShowMonthdays funktion, jeg bruger dataset til at hente fra,

Her er hele codefilen, måske du kan se noget

http://www.devzone.dk/skema.txt
Avatar billede dr_chaos Nybegynder
22. august 2006 - 14:34 #30
dette skal ændres

try
        {

            for (int i = 0; i < DateTime.DaysInMonth(DateTime.Now.Year, DateTime.Now.Month); i++)
            {
                Table2.Rows[0].Cells[4 + i].Text = dataset.SpShowMonthDays[i].Weekday.ToString();

            }
        }

        catch (IndexOutOfRangeException)
        {
            Table2.Rows[0].Cells[4 + i].Text = "test";
        }

        try
        {
            DateTime dag = dataset.SpShowMonthDays[0].date;

           
            for (int i = 0; i < DateTime.DaysInMonth(DateTime.Now.Year, DateTime.Now.Month); i++)
            {
                Table2.Rows[1].Cells[4 + i].Text = dataset.SpShowMonthDays[i].date.ToString("dd");
            }
        }

        catch (IndexOutOfRangeException)
        {
            Table2.Rows[1].Cells[4 + i].Text = "test";
        }
Avatar billede dr_chaos Nybegynder
22. august 2006 - 14:36 #31
til:
DateTime dag = dataset.SpShowMonthDays[0].date;
try

        {
            for (int i = 0; i < DateTime.DaysInMonth(dag.Year, dag.Month); i++)
            {
                Table2.Rows[0].Cells[4 + i].Text = dataset.SpShowMonthDays[i].Weekday.ToString();

            }
        }

        catch (IndexOutOfRangeException)
        {
            Table2.Rows[0].Cells[4 + i].Text = "test";
        }

        try
        {
            for (int i = 0; i < DateTime.DaysInMonth(dag.Year, dag.Month); i++)
            {
                Table2.Rows[1].Cells[4 + i].Text = dataset.SpShowMonthDays[i].date.ToString("dd");
            }
        }

        catch (IndexOutOfRangeException)
        {
            Table2.Rows[1].Cells[4 + i].Text = "test";
        }
Avatar billede dr_chaos Nybegynder
22. august 2006 - 14:43 #32
disse ændringer skal foretages mange steder
Avatar billede dr_chaos Nybegynder
22. august 2006 - 14:44 #33
alle steder hvor du bruger datetime.now.
Avatar billede bobber Nybegynder
22. august 2006 - 14:54 #34
Sorry, det havde jeg testet af, det virkede ikke, samme fejl, men har sat det ind i min kode nu
Avatar billede bobber Nybegynder
23. august 2006 - 10:36 #35
Nå jeg er kommer videre nu, der var en løkke mere som jeg ikke havde ændret ordentligt

Nu render jeg bare ind i problemet at min Sum række bliver rykket og den bibeholder 31 i dato for tidligere måned man har bladret fra,
Det kan bedre ses hvad jeg mener på dette screendump
og min kode her : http://www.devzone.dk/skema.txt

Har i noget bud
Avatar billede bobber Nybegynder
23. august 2006 - 13:57 #36
Så nu er den der næsten, nu har jeg flyttet min sum hen foran datoerne så jeg nu ikke har behov for at indsætte nogen "blank" kolonne, men min udfordring er at den stadig skriver f.eks 31 ud på siden,selvom der er f.eks 30 dage, hvordan får jeg skjult dette, for så skulle jeg være klar.
Screendump , indrammet med rød

http://www.devzone.dk/skema.JPG

skal nok smide nogle fejl points efter jer, som tak for hjælpen
Avatar billede Slettet bruger
23. august 2006 - 14:04 #37
Kunne det være i denne del:

    private void SetUpMonthAdaptors(int counter)
    {
        dataset = new DS();
       
        showMonthTableAdapter = new DSTableAdapters.SpGetMonthIdTableAdapter();
        showMonthTableAdapter.Fill(dataset.SpGetMonthId, DateTime.Now.AddDays(counter * 30));

        showMonthdaysTableAdapter = new DSTableAdapters.SpShowMonthDaysTableAdapter();
        showMonthdaysTableAdapter.Fill(dataset.SpShowMonthDays, dataset.SpGetMonthId[0].monthId);
       
    }
Avatar billede bobber Nybegynder
23. august 2006 - 14:24 #38
Nej det kan jeg ikke se skulle være det, den holder styr på hvilken måned jeg bladre frem og tilbage med
Avatar billede dr_chaos Nybegynder
25. august 2006 - 07:53 #39
Der er noget der tyder på at du et eller andet sted forsøger at hente 31 dage i en måned med kun 30.
Avatar billede dr_chaos Nybegynder
25. august 2006 - 09:03 #40
hvor laver du tabellen som vises ?
Avatar billede bobber Nybegynder
01. september 2006 - 09:37 #41
Tabellen er en ASP table, med tablecells , så der hvor jeg har mine dage og datoer er er tablecells ikke generet dynamisk, så jeg smider indhold i dem via dataset.

men smid et svar, så skal i få jeres points, ved ikke lige om jeg får løst denne her inden jeg tager på 3 ugers ferie.
Avatar billede Slettet bruger
01. september 2006 - 21:21 #42
Jeg synes, det må være dr_chaos, der fortjener dem, så jeg frafalder.
Avatar billede dr_chaos Nybegynder
03. september 2006 - 09:16 #43
Du skal tjekke hvor mange dage du forsøger at hente ud af en måned.
I et af dine loops må count altid nå 31.
Avatar billede bobber Nybegynder
04. september 2006 - 17:23 #44
Tak for hjælpen, ja det må jeg kigge på med friske øjne, tager lige 3 uger til Borneo :-)
Avatar billede Slettet bruger
05. september 2006 - 00:07 #45
Enten når den altid 31, eller også tager den længden fra en nabomåned - de korte måneder ligger alle mellem lange måneder.
Avatar billede bobber Nybegynder
05. september 2006 - 00:11 #46
Ja jeg tror den tager længden fra nabomåned, for starter jeg f.eks på september, vises der kun 30, bladre jeg så tilbage til august og frem til september igen, står der 31..
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester