Avatar billede jesperthomsen1980 Nybegynder
08. november 2007 - 11:00 Der er 15 kommentarer og
1 løsning

Rydde op i dataset

Hej - har et problem, som jeg ikke selv lige kan se en løsning på. Jeg har et dataset, med ens felter, som jeg skal skal have talt sammen.

Datasettet har 2 felter: VareId og Antal
I datasettet ligger der følgende data:

VareId - Antal
1 - 3
2 - 2
3 - 1
1 - 1
3 - 3

Mangler noget der selv kan tælle dem sammen, så der i et dataset kommer til at stå:

1 - 4
2 - 2
3 - 4

Hvordan gør man lettest det?
Avatar billede jesperthomsen1980 Nybegynder
08. november 2007 - 11:01 #1
Oprettelsen af datasettet ser således ud:

Dim tempvarerdataset As New DataSet ''former Saetproduktionsplandataset
        Dim tempvarerlinier As New DataTable ''former saetplanlinier

        Dim tempvarerID As New DataColumn
        Dim tempvarerAntal As New DataColumn
        tempvarerdataset.Tables.AddRange(New System.Data.DataTable() {tempvarerlinier})
        tempvarerlinier.Columns.AddRange(New System.Data.DataColumn() {tempvarerID, tempvarerAntal})
        tempvarerlinier.TableName = "Table1"
        tempvarerID.AutoIncrement = True
        tempvarerID.ColumnName = "Column1"
        tempvarerID.DataType = GetType(System.Int32)
Avatar billede jesperthomsen1980 Nybegynder
08. november 2007 - 11:03 #2
Oprettelsen af datasettet ser således ud:

Dim tempvarerdataset As New DataSet
Dim tempvarerlinier As New DataTable

Dim tempvarerID As New DataColumn
Dim tempvarerAntal As New DataColumn
tempvarerdataset.Tables.AddRange(New System.Data.DataTable() {tempvarerlinier})
tempvarerlinier.Columns.AddRange(New System.Data.DataColumn() {tempvarerID, tempvarerAntal})
tempvarerlinier.TableName = "Table1"
tempvarerID.AutoIncrement = True
tempvarerID.ColumnName = "Column1"
tempvarerID.DataType = GetType(System.Int32)
Avatar billede jesperthomsen1980 Nybegynder
08. november 2007 - 11:16 #3
Har overvejet at starte fra vareid 1 til antallet af vareid i databasen, og så tælle én vareid op efter endt tælling, men hvis der er 100.000 vareid'er, tager det for lang tid hver gang...
Avatar billede neoman Novice
08. november 2007 - 11:50 #4
For at få fat i de unikke VareID i datatable'en kan du lave en ny datatable som vist her:
http://weblogs.asp.net/eporter/archive/2005/02/10/370548.aspx

Når du så har de unikke vareid'er, så kan du på den oprindelige tabel køre en .compute metode til at tælle dem sammen for hvert vareid  og lægge resultatet i den nye tabel.
http://msdn2.microsoft.com/en-us/library/system.data.datatable.compute(vs.80).aspx
Avatar billede jesperthomsen1980 Nybegynder
08. november 2007 - 11:58 #5
Er det ikke kun første del af nedenstående der skal bruges? http://weblogs.asp.net/eporter/archive/2005/02/10/370548.aspx
altså SelectDistinct
Avatar billede neoman Novice
08. november 2007 - 12:07 #6
prøv lige at læse nederst i artiklen "Update 2"
Avatar billede neoman Novice
08. november 2007 - 12:17 #7
Nu har jeg også læst de kommentarer folk har tilføjet til artiklen, og hvis jeg har opfattet dem korrekt så ser det ud til, at den anførte kode er hurtigere end det nye forslag med dataviews
Avatar billede jesperthomsen1980 Nybegynder
08. november 2007 - 12:20 #8
Godt nok bange for det går lidt over evner:-(

mener du:

kramlen said: 
here is something I wrote that does the same thing - yet

just seems easier to understand:

public static DataTable SelectDistinct(string[] pColumnNames, DataTable pOriginalTable)
Avatar billede jesperthomsen1980 Nybegynder
08. november 2007 - 12:20 #9
Altså den opretter en ny dataset hvor der er id felter, hvor man så kan skelne dem fra hinanden?
Avatar billede neoman Novice
08. november 2007 - 12:27 #10
Det jeg mener er at den kode artiklens forfatter angiver gør det samme som den senere foreslåede metode md dataviews, men i kommentarerne synes det at fremgå, at hans kode er væsentlig hurtigere.

Nej - en datatable, ej et nyt dataset.
For at kunne tælle sammen på vareid'er så skal man vide hvilke unikke vareid'er der er i tabellen - det er hvad
http://weblogs.asp.net/eporter/archive/2005/02/10/370548.aspx leverer i en ny datatable.

Når man så har listen så kan man tælle sammen med .compute
Avatar billede jesperthomsen1980 Nybegynder
08. november 2007 - 12:29 #11
Ahh ok - jeg kigger på det, og vender tilbage. Tak for hjælpen foreløbig
Avatar billede jesperthomsen1980 Nybegynder
08. november 2007 - 16:11 #12
Ok - jeg har nu fået oprettet et datatable, som indeholde alle unikke id'er. Hvordan kan man nemmest løbe igennem et datatable og få fat på hver enkel værdi inden man går videre til den næste?

Jeg kan ikke få det til at virke. Plejer at løbe igennem et dataset - skal jeg smide værdierne over i et dataset for at løbe igennem dem?
Avatar billede jesperthomsen1980 Nybegynder
08. november 2007 - 16:13 #13
Er lidt ude i dette, men kan ikke se hvordam man får fat på værdien er den enkelte row.
Dim dr As DataRow
        Dim dt As DataTable

        Dim i As Integer = 0
        While i < dt.Rows.Count
            dr = dt.Rows(i)
            If temp = "hej" Then
                dr.Delete()
            Else
                i = i + 1  'tæl kun op hvis der ikke slettes en række
            End If
        End While
Avatar billede neoman Novice
08. november 2007 - 17:06 #14
Det er en god ting at google sådanne ting - nettet er fyldt med  eksempler på gennemløb af datatables.

For each workRow as DataRow in myTable.Rows
  Dim værdi1 as Hvad_den_nu_er
Dim værdi2 as Hvad_den_nu_er
  Værdi1=workRow(0) ' hvis den nu sidder i kolonne 1
  Værdi2=workRow(1) ' hvis den sidder i kolonne 2

next

hvorfor vil du delete rows ? det er et kapitel for sig hvordan  man gør det
Avatar billede jesperthomsen1980 Nybegynder
08. november 2007 - 17:25 #15
nej nej det vil jeg heller ikke... Har nu søgt google, men jeg ved ikke rigtig hvor jeg skal begynde...

Takker det virker...

smider du et svar, så for du dine fortjente point
Avatar billede neoman Novice
08. november 2007 - 22:37 #16
here goes:)
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
Kurser inden for grundlæggende programmering

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