Avatar billede simsen Mester
27. juli 2006 - 08:15 Der er 8 kommentarer og
1 løsning

Tilføje kolonne til datatable og beregning i dennne

Hej

Jeg forsøger med følgende kode, at tilføje en kolonne til dataset'et (tabellen), som jeg så skal bruge til at beregne på. Jeg aner dog ikke, hvordan jeg kan tilgå tabellens kolonner, så jeg kan lave beregningen.

Med følgende kode, får jeg fejlen:
Error    3    'System.Data.DataTable.Rows' is a 'property' but is used like a 'method'    C:\ANSI\ANSI\FakturaVis.cs    242    95    ANSI

At kan jeg ikke tilgå hver enkelt række. Kan I fortælle mig, hvordan jeg så skal tilgå den?

Koden:

da2 = new OleDbDataAdapter("SELECT Ordre.Antal, Ordre.VareNr, Produkter.Varenavn, Produkter.PrisExMoms FROM Produkter INNER JOIN (Faktura INNER JOIN Ordre ON Faktura.FakturaID = Ordre.FakturaNr) ON Produkter.VareNr = Ordre.VareNr WHERE FakturaID=@fakid", cn);

da2.SelectCommand.Parameters.Add("@fakid", OleDbType.Integer);

da2.SelectCommand.Parameters["@fakid"].Value = fakid;

dtOrdrelinier = new DataTable();
da2.Fill(dtOrdrelinier);
DataColumn dc = new DataColumn("RaekkeBeloeb");
dc.Expression = "Antal * PrisExMoms";
dtOrdrelinier.Columns.Add(dc);
dgrOrdre.DataSource = dtOrdrelinier;

//calculate "Antal*PrisExMoms" value for each row
for (int i = 0; i <= dtOrdrelinier.Rows.Count - 1; i++)
  {
      dtOrdrelinier.Rows(i).Item(4) = dtOrdrelinier.Rows(i).Item(0) * dtOrdrelinier.Rows(i).Item(3);
  }

//bound datatable "dt" to dataGridView
this.dgrOrdre.DataSource = dtOrdrelinier;

mvh
simsen :-)
Avatar billede dj_uncas Nybegynder
27. juli 2006 - 09:01 #1
Ahh.. Du bruger lidt VB-syntax. Når du gerne vil slå op i en collection (som f.eks. dtOrdrelinier) skal du ikke bruge (i) men [i]. Altså:

dtOrdrelinier.Rows[i].Item[4] = dtOrdrelinier.Rows[i].Item[0] * dtOrdrelinier.Rows[i].Item[3];
Avatar billede dj_uncas Nybegynder
27. juli 2006 - 09:02 #2
ligesom du gør med dine parameters: Parameters["@fakid"]
Avatar billede simsen Mester
27. juli 2006 - 09:44 #3
Hej dj uncas

Ja det er ikke sådan med os newbees, der leder og leder på nettet.....Og jeg der troede, jeg gjorde mig umage, med at sortere i C# og vb sproget, når jeg ledte *griner*

Nu brokker den sig da ikke længere over Rows - men stadig over Item. Den skriver:

Error    1    'System.Data.DataRow' does not contain a definition for 'Item'    C:\ANSI\ANSI\FakturaVis.cs    242    39    ANSI

Kan du fortælle mig, hvad jeg skal bruge istedet?
Avatar billede dj_uncas Nybegynder
27. juli 2006 - 09:59 #4
Jeg mener din property hedder Items - det giver jo også meningen når det er en samling af mere en et objekt.
Avatar billede simsen Mester
27. juli 2006 - 10:20 #5
Der fines ikke noget der hedder Items men kun noget der hedder ItemArray?
Avatar billede simsen Mester
27. juli 2006 - 10:31 #6
Bare glem det dj uncas. Jeg har fundet en anden løsning, som virker perfekt. Bare smid et svar og du får dine points :-)

Løsningen, hvis andre har brug for det:

// Databinding for the Grid
            da2 = new OleDbDataAdapter("SELECT Ordre.Antal, Ordre.VareNr, Produkter.Varenavn, Produkter.PrisExMoms FROM Produkter INNER JOIN (Faktura INNER JOIN Ordre ON Faktura.FakturaID = Ordre.FakturaNr) ON Produkter.VareNr = Ordre.VareNr WHERE FakturaID=@fakid", cn);

            da2.SelectCommand.Parameters.Add("@fakid", OleDbType.Integer);

            da2.SelectCommand.Parameters["@fakid"].Value = fakid;         

            //create datatable
            dtOrdrelinier = new DataTable();

            //fill datatable
                da2.Fill(dtOrdrelinier);

            //create colum to hold the sum of other two colums
            DataColumn col = new DataColumn("RaekkeBeloeb");
            col.DataType = typeof(System.Decimal);
            col.Expression = "Antal*PrisExMoms";

            //add the colums
            dtOrdrelinier.Columns.Add(col);

            //Get the sum of the all totals
            txtBelob.Text = dtOrdrelinier.Compute("Sum(RaekkeBeloeb)", "").ToString();
           
            //bind datatable to grid view
            dgrOrdre.DataSource = dtOrdrelinier;
Avatar billede dj_uncas Nybegynder
27. juli 2006 - 10:35 #7
Det var vist mig der stenede - jeg troede du havde gang i et DataTable, men når det er DataRow (som er en collection i sig selv) kan du bruge:

dtOrdreliner.Rows[i][4] = dtOrdrelinier.Rows[i][0] * dtOrdrelinier.Rows[i][3];


(også mest til andre)
Avatar billede simsen Mester
27. juli 2006 - 11:00 #8
Tak - det skal jeg huske til en anden gang. Husk at smide et svar

simsem :-)
Avatar billede dj_uncas Nybegynder
27. juli 2006 - 11:38 #9
Det skal jeg gøre ;-)
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