Avatar billede linemus83 Nybegynder
06. april 2005 - 11:03 Der er 52 kommentarer og
2 løsninger

Summereing fra DataGrid

Jeg har et datagrid med 5 kolonner - den sidste kolonne er et beløb. Alle de udskrevne beløb skal så summeres op til sidst - hvordan gør jeg dette ?

/Line
Avatar billede www.jakub.dk Nybegynder
06. april 2005 - 12:10 #1
Hvis det er en DataTabel du bruger som DataSource, så kan du gør følgende:

int sum = 0;
foreach (DataRow dr in dataTabel.Rows)
{
  int val = dr["NavnetPåDinKolonne"];
  sum += val;
}

variablen sum indeholder så sum værdien.
Avatar billede www.jakub.dk Nybegynder
06. april 2005 - 12:11 #2
Det kan godt være at du skal kaste værdien så følgende linie:

int val = dr["NavnetPåDinKolonne"];

ser således ud:´

int val = (int)dr["NavnetPåDinKolonne"];
Avatar billede linemus83 Nybegynder
06. april 2005 - 12:13 #3
Jeg har denne:
    SqlParameter[] parm = new SqlParameter[3];

            parm[0] = new SqlParameter("@parmSalgsted", Salgsted);
            parm[1] = new SqlParameter("@parmStartNr", StartNr);
            parm[2] = new SqlParameter("@parmSlutNr", SlutNr);
           
            DataSet ds = SqlHelper.ExecuteDataset(AppSettings.getConnString2,CommandType.StoredProcedure,"getAllIndbetalinger", parm);

            dgIndbetalinger.DataSource = ds;
            dgIndbetalinger.DataBind();

Og jeg kan ikke bruger Rows på mit Datagrid, så det virker ikke.
Avatar billede www.jakub.dk Nybegynder
06. april 2005 - 12:27 #4
Den DataSet objekt ds, som du får tilbage må da indeholde en eller flere DataTabel objekter, med resultatet, derfor kan da godt bruge denne metode. Ellers må du uddybbe det her meget mere.
Avatar billede linemus83 Nybegynder
06. april 2005 - 12:29 #5
Hvis vi nu tager denne:

int sum = 0;
foreach (DataRow dr in dataTabel.Rows)
{
  int val = dr["NavnetPåDinKolonne"];
  sum += val;
}

Så er der ingen funktioner på DataGrid, der hedder Rowns. Og den kan ikke bruge foreach på DataGrid. Så kan jeg jo ikke bruge den. :-)
Avatar billede linemus83 Nybegynder
06. april 2005 - 12:30 #6
Ja, der skulle selvfølgelig stå Rows
Avatar billede www.jakub.dk Nybegynder
06. april 2005 - 12:42 #7
Der er forskel på en DataGrid og en DataSet.

DataGrid bruges til at vise data som du f.eks har i en DataSet objekt:

    SqlParameter[] parm = new SqlParameter[3];

            parm[0] = new SqlParameter("@parmSalgsted", Salgsted);
            parm[1] = new SqlParameter("@parmStartNr", StartNr);
            parm[2] = new SqlParameter("@parmSlutNr", SlutNr);
         
            DataSet ds = SqlHelper.ExecuteDataset(AppSettings.getConnString2,CommandType.StoredProcedure,"getAllIndbetalinger", parm);

            dgIndbetalinger.DataSource = ds;
            dgIndbetalinger.DataBind();
           
            DataTable dt = ds.Tables["NavnetPåDenSeulterendeTabel"];
            int sum = 0;
            foreach (DataRow dr in dt.Rows)
            {
              int val = dr["NavnetPåDinKolonne"];
              sum += val;
            }
Avatar billede www.jakub.dk Nybegynder
06. april 2005 - 12:44 #8
Jeg har ikke rodet så meget med Stored Procedures, men jeg gætter på at den resulterende tabel muligvis hedder "getAllIndbetalinger", lige som din Stored Procedure gør, ellers kan du hente den ved hjælp af indexering:

DataTable dt = ds.Tables["NavnetPåDenSeulterendeTabel"];

Skal se således ud:

DataTable dt = ds.Tables[0];

På den måde henter du den første tabel i din DataSet objekt.
Avatar billede linemus83 Nybegynder
06. april 2005 - 12:48 #9
Jeg har prøvet at køre den nu, men får en fejlmeddelelse:

Object reference not set to an instance of an object.

Line 62:             DataTable dt = ds.Tables["getAllIndbetalinger"];
Line 63:             int sum = 0;
Line 64:             foreach (DataRow dr in dt.Rows)
Line 65:             {
Line 66:                 int val = (int)dr["Belob"];

Og der er så fejl i linie 64 - altså denne: foreach (DataRow dr in dt.Rows)
Avatar billede spif2001 Nybegynder
06. april 2005 - 12:50 #10
det er dt der ikke bliver sat til en værdi

Line 62:            DataTable dt = ds.Tables["getAllIndbetalinger"];

finder ikke noget her - ergo er dt = null.
Avatar billede linemus83 Nybegynder
06. april 2005 - 12:55 #11
Hm...men hvordan sætter jeg det til en værdi? Og hvilken ?
Avatar billede spif2001 Nybegynder
06. april 2005 - 12:56 #12
Kender du til breakpoints? Ellers er der en lille smule om det her. Hjælper når man skal teste sin kode, eller bare se om den opfører sig ordentligt...

http://www.eksperten.dk/spm/599350
Avatar billede linemus83 Nybegynder
06. april 2005 - 12:57 #13
Kender en smule til det, men har aldrig rigtigt brugt det. Og jeg kan nemlig slet ikke finde ud af, hvordan jeg skal løse den der.
Avatar billede spif2001 Nybegynder
06. april 2005 - 12:59 #14
jeg overlader Tables til de andre - er ikke den store Datagrid haj...
Avatar billede linemus83 Nybegynder
06. april 2005 - 12:59 #15
Hehe, heller ikke mig - er første gang, jeg bruger det, så jeg ved slet ingenting :-)
Avatar billede spif2001 Nybegynder
06. april 2005 - 13:02 #16
Hvad hvis du bare skriver


Line 62:            DataTable dt = ds.Tables[0];

Fusk måske, men giver den noget?
Avatar billede linemus83 Nybegynder
06. april 2005 - 13:08 #17
Så kommer der dette:


Specified cast is not valid.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.InvalidCastException: Specified cast is not valid.

Source Error:


Line 65:             foreach (DataRow dr in dt.Rows)
Line 66:             {
Line 67:                 int val = (int)dr["Belob"];
Line 68:                 sum += val;
Line 69:                 Label4.Text = sum.ToString();


Source File: c:\inetpub\wwwroot\print\indbetalinger.aspx.cs    Line: 67
Avatar billede spif2001 Nybegynder
06. april 2005 - 13:09 #18
Line 62:            DataTable dt = (DataTable)ds.Tables[0];
Avatar billede spif2001 Nybegynder
06. april 2005 - 13:11 #19
ah sorry - prøver igen ...
Avatar billede linemus83 Nybegynder
06. april 2005 - 13:11 #20
Den har stadig et problem i linie 67 --> int val = (int)dr["Belob"];
Avatar billede spif2001 Nybegynder
06. april 2005 - 13:13 #21
for(int i = 0; i < dt.Rows.Count; i++)
{
int val = (int)dt.Rows[i].Value // ved ikke om det er value eller hvad det er - sidder og koder i hånden
sum += val;
Label4.Text = sum.ToString();
}
Avatar billede spif2001 Nybegynder
06. april 2005 - 13:14 #22
nej nu må jeg holde op - aner ikke hvad jeg sidder og laver - er der ikke andre der kan hjælpe?
Avatar billede linemus83 Nybegynder
06. april 2005 - 13:17 #23
Nej, der er nemlig ikke en Value - men det ser heller ikke ud til, at der er noget tilsvarende.
Avatar billede linemus83 Nybegynder
06. april 2005 - 13:23 #24
Jeg brugte denne her: int val = (int)dt.Rows[i].RowState;

Og så giver beløbet 30, men det skulle give lidt over 1000. Vidste heller ikke lige, hvad den gjorde. :-) Men det er jo nok derhen af, det du har givet mig. Du har vel ikke et gæt på noget andet ?
Avatar billede linemus83 Nybegynder
06. april 2005 - 13:25 #25
Nårh, den ganger bare antal rækker med 2.
Avatar billede spif2001 Nybegynder
06. april 2005 - 13:31 #26
int val = (int)dt.Rows[i].ItemArray[0]; // puuh det er fusk
Avatar billede www.jakub.dk Nybegynder
06. april 2005 - 13:35 #27
Kolonnen "Belob" Er det af typen string eller int og er det altid et tal?
Avatar billede www.jakub.dk Nybegynder
06. april 2005 - 13:38 #28
du kan evt prøve det her:

int val = int.Parse(dr["Belob"]);

Dette skal du kun gøre hvis den kolonne altid er et tal, dog er det en god ide at have en try catch rundt omkring det.
Avatar billede linemus83 Nybegynder
06. april 2005 - 13:38 #29
Der kom en fejl igen:

Specified cast is not valid.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.InvalidCastException: Specified cast is not valid.

Source Error:


Line 67:             for(int i = 0; i < dt.Rows.Count; i++)
Line 68:             {
Line 69:                 int val = (int)dt.Rows[i].ItemArray[0];
Line 70:                 sum += val;
Line 71:                 Label4.Text = sum.ToString();


Source File: c:\inetpub\wwwroot\print\indbetalinger.aspx.cs    Line: 69



Har du flere idéer ? :-)
Avatar billede linemus83 Nybegynder
06. april 2005 - 13:39 #30
Belob er altid et tal. Det er et beløb, som de studerende indbetaler, så de kan få prints.
Avatar billede linemus83 Nybegynder
06. april 2005 - 13:41 #31
int val = int.Parse(dr["Belob"]); --> denne her er der også fejl i.
Avatar billede spif2001 Nybegynder
06. april 2005 - 13:41 #32
det er ikke en string i datagrid'en?

int val = Convert.ToInt32((string)dt.Rows[i].ItemArray[0]);
Avatar billede spif2001 Nybegynder
06. april 2005 - 13:41 #33
int val = Convert.ToInt32((string)dt.Rows[i].ItemArray[0])); //glemte parantes
Avatar billede www.jakub.dk Nybegynder
06. april 2005 - 13:42 #34
Hvilken fejl giver:
int val = int.Parse(dr["Belob"]);

?
Avatar billede linemus83 Nybegynder
06. april 2005 - 13:44 #35
Stadig samme fejl som før --- Specified cast is not valid.
Avatar billede linemus83 Nybegynder
06. april 2005 - 13:46 #36
www.jakub.dk ---> cannot apply indexing with [] to an expression op type xxxxxxxxxx
Avatar billede www.jakub.dk Nybegynder
06. april 2005 - 13:46 #37
Det er ikke en cast -- Er du sikker på at det er den linie? Det er en Parse.

Hele koden:

    SqlParameter[] parm = new SqlParameter[3];

            parm[0] = new SqlParameter("@parmSalgsted", Salgsted);
            parm[1] = new SqlParameter("@parmStartNr", StartNr);
            parm[2] = new SqlParameter("@parmSlutNr", SlutNr);
       
            DataSet ds = SqlHelper.ExecuteDataset(AppSettings.getConnString2,CommandType.StoredProcedure,"getAllIndbetalinger", parm);

            dgIndbetalinger.DataSource = ds;
            dgIndbetalinger.DataBind();
         
            DataTable dt = ds.Tables[0];
            int sum = 0;
            foreach (DataRow dr in dt.Rows)
            {
              int val = int.Parse(dr["Belob"]);
              sum += val;
            }

Er det den kode du kører. Præcist?
Avatar billede linemus83 Nybegynder
06. april 2005 - 13:48 #38
SqlParameter[] parm = new SqlParameter[3];

            parm[0] = new SqlParameter("@parmSalgsted", Salgsted);
            parm[1] = new SqlParameter("@parmStartNr", StartNr);
            parm[2] = new SqlParameter("@parmSlutNr", SlutNr);

           
           
            DataSet ds = SqlHelper.ExecuteDataset(AppSettings.getConnString2,CommandType.StoredProcedure,"getAllIndbetalinger", parm);
           
            dgIndbetalinger.DataSource = ds;
            dgIndbetalinger.DataBind();



            DataTable dt = ds.Tables[0];
            int sum = 0;
            for(int i = 0; i < dt.Rows.Count; i++)
        {
                int val = int.Parse(dt["Belob"]);

        sum += val;
        Label4.Text = sum.ToString();
}
Avatar billede linemus83 Nybegynder
06. april 2005 - 13:49 #39
Jeg havde lige denne linie: for(int i = 0; i < dt.Rows.Count; i++)

Men det gav det samme alligevel
Avatar billede www.jakub.dk Nybegynder
06. april 2005 - 13:52 #40
Ok du skal bruge foreach i stedet for for løkke.. Prøv lige at teste den kode, som jeg postede.
Avatar billede www.jakub.dk Nybegynder
06. april 2005 - 13:54 #41
Label4.Text = sum.ToString();

Den linie skal forresten ud af foreach løkken
Avatar billede linemus83 Nybegynder
06. april 2005 - 13:56 #42
Der er stadig det problem her: cannot apply indexing with [] to an expression op type xxxxxxxxxx
Avatar billede www.jakub.dk Nybegynder
06. april 2005 - 14:02 #43
Ok har fundet frum til en løsning, som burde virke:

  SqlParameter[] parm = new SqlParameter[3];

            parm[0] = new SqlParameter("@parmSalgsted", Salgsted);
            parm[1] = new SqlParameter("@parmStartNr", StartNr);
            parm[2] = new SqlParameter("@parmSlutNr", SlutNr);
     
            DataSet ds = SqlHelper.ExecuteDataset(AppSettings.getConnString2,CommandType.StoredProcedure,"getAllIndbetalinger", parm);

            dgIndbetalinger.DataSource = ds;
            dgIndbetalinger.DataBind();
       
            DataTable dt = ds.Tables[0];
            int sum = 0;
            for (int i=0;i<dt.Rows.Count;i++)
            {
              int val = (int)dt.Rows[i]["Belob"];
              sum += val;
            }
            Label4.Text = sum.ToString();

Håber at det hjælper.
Avatar billede www.jakub.dk Nybegynder
06. april 2005 - 14:03 #44
Hvis det giver fejl så sig lige til. + Fejl tekst
Avatar billede linemus83 Nybegynder
06. april 2005 - 14:45 #45
Virker ikke -


--------------------------------------------------------------------------------

Specified cast is not valid.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.InvalidCastException: Specified cast is not valid.

Source Error:


Line 62:             for (int i=0;i<dt.Rows.Count;i++)
Line 63:             {
Line 64:                 int val = (int)dt.Rows[i]["Belob"];
Line 65:                 sum += val;
Line 66:             }


Source File: c:\inetpub\wwwroot\print\indbetalinger.aspx.cs    Line: 64
Avatar billede linemus83 Nybegynder
06. april 2005 - 14:47 #46
Nu virker den vist :-)

Jeg gjorde sådan:

int val = Convert.ToInt32(dt.Rows[i]["Belob"]);
Avatar billede www.jakub.dk Nybegynder
06. april 2005 - 14:48 #47
Ja det kan også bruges
Avatar billede linemus83 Nybegynder
06. april 2005 - 14:48 #48
I må lige begge smide et svar, så I kan dele pointene!

Mvh Line
Avatar billede www.jakub.dk Nybegynder
06. april 2005 - 14:50 #49
svar
Avatar billede spif2001 Nybegynder
06. april 2005 - 14:53 #50
svar (hvis jeg er en af de begge :) )
Avatar billede linemus83 Nybegynder
06. april 2005 - 14:54 #51
Hehe, det var du :-)
Avatar billede linemus83 Nybegynder
06. april 2005 - 14:55 #52
Og I skal have mange tak for hjælpen - og tålmodigheden. :-)
Avatar billede spif2001 Nybegynder
06. april 2005 - 14:56 #53
anytime
Avatar billede www.jakub.dk Nybegynder
06. april 2005 - 15:13 #54
np
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