Avatar billede wired Nybegynder
25. marts 2004 - 11:06 Der er 27 kommentarer og
1 løsning

gennemløbe et dataview?

1) Følgende virker:

Dim ds As New DataSet
ds.ReadXml(MapPath("myxml.xml"))
ds.Tables("personer").DefaultView.Sort = "navn"

2) Nu vil jeg gerne gennemløbe alle rows ala:

For Each Row As DataRow In ds.Rows

3) Men det virker ikke, det gør dette:

For Each Row As DataRow In ds.Tables("person").Rows

4) Men det er bare ikke sorteret.

?) Hvordan kan jeg gennemløbe mine sorteret/filteret data?
Avatar billede burningice Nybegynder
25. marts 2004 - 11:13 #1
DataView dv = ds.Tables("personer").DefaultView;
dv.Sort = "navn";

foreach(DataRow dr in dv.Rows)
Avatar billede wired Nybegynder
25. marts 2004 - 11:34 #2
Jeg får fejl i sidste linie
Det er ikke muligt at skriv dv.rows
"rows is not a member of system.data.dataview"
Avatar billede wired Nybegynder
25. marts 2004 - 11:39 #3
Havde ellers været - kanon.
Avatar billede burningice Nybegynder
25. marts 2004 - 11:42 #4
du skal da også bare gå i små sko... :P

DataView dv = ds.Tables("personer").DefaultView;
dv.Sort = "navn";

foreach(DataRowView drv in dv.Items) {
  DataRow dr = drv.Row;
  // Gør et eller andet

}
Avatar billede wired Nybegynder
25. marts 2004 - 11:52 #5
Der må have været tilbud på sko for jeg får samme fejl..
Der er heller ikke noget som hedder dv.items
Avatar billede burningice Nybegynder
25. marts 2004 - 12:45 #6
må jeg lige se din kode
Avatar billede burningice Nybegynder
25. marts 2004 - 12:49 #7
ah... kunne være jeg skulle kigge på udsalg på briller så... :/

DataView dv = ds.Tables("personer").DefaultView;
dv.Sort = "navn";

for (int i = 0; i < dv.Count; i++) {
  DataRow row = dv.Item[i].Row;
  // Gør et eller andet
}
Avatar billede burningice Nybegynder
25. marts 2004 - 12:53 #8
og hvis det heller ikke virker, så kunne det være man skulle kigge på GetEnumerator()

IEnumerator iEnum = dv.GetEnumerator();

while (iEnum.MoveNext()) {
  object o = iEnum.Current;
  //Start med at undersøge hvilken type du får
  MessageBox.Show(o.GetType().ToString());
}
Avatar billede wired Nybegynder
25. marts 2004 - 15:02 #9
Hvis jeg skal til at bruge index-tal kan jeg lige så godt skrive i asp.old igen.
Fidusen skulle jo netop være at man ikke kan mære forskel på om jeg har hentet fra en .xml fil eller en sql-db, når først det er et dataset.

Det må da kunne gøres nemmere/smartere.
Avatar billede burningice Nybegynder
25. marts 2004 - 15:29 #10
okay okay.. hvad er det helt præcis du VIL med dine data... hvis det er fordi at du skal vise dem på en hjemmeside kan du sagtens bare binde dit DataView til et DataGrid
Avatar billede wired Nybegynder
25. marts 2004 - 15:30 #11
Ok men kan skrive:
For Each Row As System.Data.DataRow In dv.Table.Rows

men det tilføjer stadig ikke sorting, heller ikke om jeg skriver:
dv.ApplyDefaultSort = True
Avatar billede burningice Nybegynder
25. marts 2004 - 15:33 #12
dv.Table giver jo bare en reference til den table dit DataView er lagt ovenpå
Avatar billede burningice Nybegynder
25. marts 2004 - 15:34 #13
men hvorfor siger du ikke hvad det skal ende ud med... det kan være du er låst fast i en bestemt rille og at det kan løses på en meget smartere måde
Avatar billede wired Nybegynder
25. marts 2004 - 15:39 #14
Jeg vil gerne programmere mig frem til hjemmesiden, og samtidig skal alle data hentes fra .xml filer men være forberedt på at flyttes over til en SQL DB.

Ved at hente mine xml-data ind i et dataset bliver jeg uafhængig af om det er xml eller SQL.
Jeg ved ikke hvordan jeg programmere mig til et datagrid, samt tilknyttet hver linie det link og design som jeg ønsker, det er meget nemmere programmeringsmæssigt, og så slipper jeg også for flere kilo viewstate data.

Kort fortalt har jeg kunne dette problem ved at programmere mig til siden, hvor imod bruger jeg datagrid skal jeg til at finde ud af hvordan jeg knytter link og laver designet rigtigt samt dynamisk ændre disse. Har forsøgt men her kommer bare en masse nye problemer.
Avatar billede wired Nybegynder
25. marts 2004 - 15:40 #15
Du har muligvis ret. Jeg vil gerne prøve:
Avatar billede burningice Nybegynder
25. marts 2004 - 16:03 #16
uhm... ja... typisk dilemma man har når man kommer fra asp til asp.net, at man gerne vil skrive hver eneste kode linje selv

"If i didn't invented it, it's not good enough"-syndromet... pas meget på med det, lider selv af det til tider.

Hvis jeg var dig ville jeg sætte mig noget mere ind i de forskellige måder at repræsentere data på. Datagrid er jo slet ikke den eneste, og måske alt for overkill til dig? Personligt bruger jeg den kun meget sjældent, kan bedre lide Repeateren, for der har man noget mere kontrol over tingene. Ang. Viewstate kan du jo bare slå det fra... den har sine ulemper, men så sandelig også fordele.

Fordelen ved at bruge de indbyggede måder at populere data med er at du ikke skal bekymre dig om at loope hver eneste record igennem, og ønsker du at få data'erne et andet sted fra kan du bare binde en anden type til din DataSource, du skal altså ikke tænke på bindeleddet mellem dine data og dit design. Alt du skal bekymre dig om er hvordan at det skal se ud på siden og hvordan at du henter data'erne ind... bindingsleddet imellem dem står .Net for.

Så ja, der findes smartere måder at gøre det på en at bruge den gamle old asp-style med at loope hele dit recordset igennem.
Avatar billede wired Nybegynder
25. marts 2004 - 16:05 #17
Jeg har en .xml fil med en masse data. Heraf skal jeg brug to kolonner:
Resultatet skal blive som: http://skitur.person.dk/eksperten.htm
men når jeg klikker på en linie skal jeg få første kolonne indhold retur i __EVENTTARGET og et valgfrit navn tilbage i __EVENTARGUMENT
eller også en anden måde at returnere direkte til en procedure i en indlæse control, med min. første kolonne navn retur
Avatar billede wired Nybegynder
25. marts 2004 - 16:10 #18
Jeg har prøvet datagrid, datalist og repeater etc. men de virker besværlige hvis man ønsker at tilføje buttonlinks til hver række eller hvis man ønsker bare et noget anderledes design. Jeg troede at fidusen ved dotnet var at man kunne klare det hele i codebehind, men netop disse forhindre det, de tvinger en til at skulle over på html siden igen.
Avatar billede burningice Nybegynder
25. marts 2004 - 16:29 #19
wired>> fidusen er du kan bestemme hvordan det skal SE UD på din aspx-side og kode HVAD DER SKAL SKE i din codebehind
Avatar billede wired Nybegynder
25. marts 2004 - 16:39 #20
Det havde været rart hvis man kunne kode sig fra det hele.
Kan du se at noget så simpelt alligevel er nemmest uden datagrid, repeater etc.
Avatar billede burningice Nybegynder
25. marts 2004 - 17:01 #21
vender tilbage lidt senere.. har lig enogle ting jeg skal ordne
Avatar billede wired Nybegynder
25. marts 2004 - 17:08 #22
ok
Avatar billede wired Nybegynder
25. marts 2004 - 18:25 #23
Bare sådan et lille problem som at nøjes med at vise 2 af kolonnerne kan man ikke med datagrid. øv.
Avatar billede burningice Nybegynder
25. marts 2004 - 18:34 #24
arg... nu forsvandt mit lange indlæg pludselig... her kommer lige et forkortet udgave

Nej, fidusen med codebehind er ikke at du ikke skal over på din html side mere. Fidusen er at det bliver delt op. Fidusen er at du i koden ikke skal bekymre dig om hvordan at aspx-siden er designet når du binder noget data til en data-kontrol. Og du på aspx-siden ikke skal tænke på hvor data'erne kommer fra, så længe de bare kommer.

Jo, du kan da godt droppe at bruge de indbyggede data-kontroller, men så må du indstille dig på enten

1) at udvilke dine egne
2) droppe events og postback (ja, vi er tilbage ved asp)

Og jo, du kan godt skjule nogle kulonner i datagrid. Pas på at du ikke blive frustreret og bander asp.net langt ind i helvede bare fordi at du måske skal omstille din tankegang lidt fra asp og til asp.net
Avatar billede wired Nybegynder
25. marts 2004 - 19:55 #25
Med bl.a.

AddHandler RowButton.Click, AddressOf RowButton_Click

Row.Attributes.Add("onclick", Page.GetPostBackEventReference(RowButton, "tekst"))

Jeg har stor succes med både events og postback uden brug af data-kontroller,
men jeg kan stadig ikke lave min meget simpel side ved brug af datagrid, det syntes jeg er en stor begrænsning.
Avatar billede burningice Nybegynder
25. marts 2004 - 20:26 #26
ja, ovenstående virker jo fint med en enkelt knap på siden... og det er da også ovenståede metode man vil bruge hvis man udvikler sine egne datakontroller. Men der er jo langt fra det lille eksempel med at knytte et event til en knap og til store datastrukturer med ItemCommand, ItemDataBound o.lign.-events som er meget dejlige at bruge når man kender lidt til dem.

Hvis du skal lave en meget simpel side, så er datagrid heller ikke den rette kontrol at bruge. Jeg har kigget på din side, og en repeater med en dertil tilknyttet OnItemDataBound og ItemCommand-event tilknyttet burde være tilstrækkeligt til at klare jobbet.
Avatar billede wired Nybegynder
26. marts 2004 - 00:14 #27
Nåe, men jeg fandt endelig selv løsningen:
  For Each Row As System.Data.DataRowView In dv

Det har dog været hyggeligt at skrive sammen. Jeg vil forsøge fremover at tænke lidt mere design / kode-mæssigt.
Avatar billede burningice Nybegynder
30. marts 2004 - 11:50 #28
i sdk'et bruger de også mit eksempel med for-løkken til at skrive rækkerne ud, så det var ikke helt forkert det jeg skrev

Fra sdk'et:

  for(int i = 0; i<dv.Count;i++){
      Console.WriteLine("\t" + dv[i]["item"]);
  }
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