Toon posts:

[C#] DataView klopt niet meer na sorteren *

Pagina: 1
Acties:
  • 120 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Ik heb een grid waar het mogelijk is om te sorteren.

Dit gebeurt middels de volgende code:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
private void sorteren(string sortExpression)
        {   
            DataView dv = (DataView) Session["data"];   
            Debug.WriteLine(dv.Table.Rows[0][1].ToString());
            if(dv.Sort == sortExpression + " DESC")
            {
                dv.Sort = sortExpression + " ASC";
            }
            else
            {
                dv.Sort = sortExpression + " DESC";
            }
            
            Session["data"]=dv.Table.DefaultView;           
            dg_producten.DataSource = dv;
            dg_producten.DataBind();
            Debug.WriteLine(dv.Table.Rows[0][1].ToString());
                                 }


Bij de 2e writeline moet er natuurlijk een ander product worden gevonden dan bij de 1e writeline, maar dit is niet het geval.
Hoe zorg ik ervoor dat de DataView wordt aangepast?

[ Voor 11% gewijzigd door Verwijderd op 09-07-2003 09:29 ]


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Mja, 't is niet de eerste keer dat je erop gewezen wordt:
Plaats code binnen code tags
Doe d'r eens wat aan.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • whoami
  • Registratie: December 2000
  • Laatst online: 22:54
Waarop stop je de DefaultView van je DataView terug in je session state en niet je DataView zelf?

https://fgheysels.github.io/


Verwijderd

Topicstarter
Omdat deze verderop in het programma weer wordt gebruikt. maar als ik
C#:
1
dv = dv.Table.DefaultView;


doe werkt het ook niet.

  • whoami
  • Registratie: December 2000
  • Laatst online: 22:54
Volgens mij heeft het te maken met dit feit:

Je hebt wel de sortExpression gezet, maar er is nog geen postback opgetreden op het moment dat je de nieuwe waarde opvraagt.
Het sorteren gebeurt nl. op de server en niet op de client.

https://fgheysels.github.io/


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-08 11:40

gorgi_19

Kruimeltjes zijn weer op :9

Sowieso vraag ik me af waarom je niet het SortEvent van de datagrid afvangt en deze gebruikt.
* gorgi_19 vraagt zich af of de method uberhaupt wel in wordt gegaan; 'k heb er zo m'n twijfels over...

[ Voor 57% gewijzigd door gorgi_19 op 09-07-2003 09:56 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
De methode wordt ingegaan, en er wordt ook gesorteerd. Dit werkt allemaal goed. Maar wil ik de informatie van de 1e regel van het grid dan krijg ik de eerste regel zoals deze was voor het sorteren.

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
private void dg_producten_SortCommand(object source, System.Web.UI.WebControls.DataGridSortCommandEventArgs e)
        {
            sorteren(e.SortExpression);         
        }

private void sorteren(string sortExpression)
        {   
            DataView dv = (DataView) Session["data"];   
            Debug.WriteLine(dv.Table.Rows[0][1].ToString());
            if(dv.Sort == sortExpression + " DESC")
            {
                dv.Sort = sortExpression + " ASC";
            }
            else
            {
                dv.Sort = sortExpression + " DESC";
            }
            
            Session["data"]=dv.Table.DefaultView;           
            dg_producten.DataSource = dv;
            dg_producten.DataBind();
            DataView dv2 = dv.Table.DefaultView;
            Debug.WriteLine(dv2.Table.Rows[0][1].ToString());
            
            
            
        }


ps. waarom staat er een * achter de topictitel?

[ Voor 12% gewijzigd door Verwijderd op 09-07-2003 10:01 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 22:54
Je vraagt de data op, maar die data is NOG niet gesorteerd, aangezien de postback nog niet uitgevoerd is.
Plaats je die 2de writeline in je pageload, dan zal je wel de juiste data te zien krijgen.

Ik denk dat je eens een boek moet lezen over ASP.NET en vooral dan de inleiding over events (validation-events, cached events en postback-events) en hoe een asp.net pagina uitgevoerd wordt.

Web - programming is wel iets anders dan Windows-programmign.

Over dat *-tje, lees daarvoor de P&W FAQ eens. (Die mag je ook zowiezo wel eens lezen, want het is nodig).

[ Voor 11% gewijzigd door whoami op 09-07-2003 10:05 ]

https://fgheysels.github.io/


Verwijderd

Topicstarter
Nope met postback heeft het anders ook niks te maken, wanneer ik de debug in de page_load zet geeft deze nog steeds dezelfde waarde.

  • whoami
  • Registratie: December 2000
  • Laatst online: 22:54
Het heeft er wel iets mee te maken.
Je zet ook de 'oude' dataview nog in je sessie-variabele.

https://fgheysels.github.io/


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-08 11:40

gorgi_19

Kruimeltjes zijn weer op :9

http://msdn.microsoft.com...taviewclasstabletopic.asp

Volgens mij ben je de dataview en de originele datatable door de war aan het halen.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
maar moet ik dan opnieuw de database benaderen en alle producten ophalen met de order by erbij?en deze in de session zetten? dat lijkt me onnodig toch?

[ Voor 4% gewijzigd door Verwijderd op 09-07-2003 10:28 ]


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-08 11:40

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op 09 July 2003 @ 10:28:
maar moet ik dan opnieuw de database benaderen en alle producten ophalen met de order by erbij?en deze in de session zetten? dat lijkt me onnodig toch?
Dat zeg ik niet.

Ik zeg: Je maakt een bewerking van A. Deze bewerking sorteer je. Vervolgens negeer je de bewerking en ben je verbaasd dat de originele bron nog hetzelfde is.

[ Voor 6% gewijzigd door gorgi_19 op 09-07-2003 10:32 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
gorgi_19 schreef op 09 July 2003 @ 10:25:
http://msdn.microsoft.com...taviewclasstabletopic.asp

Volgens mij ben je de dataview en de originele datatable door de war aan het halen.
ik maak inderdaad gebruik van de originele datatable:

C#:
1
Session["data"]=ds.Tables[0].DefaultView;


waarna ik de session in een dataview zet.
moet ik eerst onderstaande doen dan?

C#:
1
2
dv = ds.Tables[0].DefaultView;
Session["data"]= dv;

  • whoami
  • Registratie: December 2000
  • Laatst online: 22:54
gorgi_19 schreef op 09 July 2003 @ 10:25:
http://msdn.microsoft.com...taviewclasstabletopic.asp

Volgens mij ben je de dataview en de originele datatable door de war aan het halen.
Dat dacht ik ook al. Vandaar m'n eeste reply in dit topic.

Zet eens het bewaren van je dataview in je sessie-variabele in de Page_Unload en het ophalen in de page_load.
De page_unload wordt nl. uitgevoerd als alle andere events uitgevoerd zijn. Op dat moment zal de dataview dus opnieuw gesorteerd zijn.

[ Voor 13% gewijzigd door whoami op 09-07-2003 10:32 ]

https://fgheysels.github.io/


Verwijderd

Topicstarter
gorgi_19 schreef op 09 July 2003 @ 10:30:
[...]

Dat zeg ik niet.

Ik zeg: Je maakt een bewerking van A. Deze bewerking sorteer je. Vervolgens negeer je de bewerking en ben je verbaasd dat de originele bron nog hetzelfde is.
Is logisch wat je zegt, maar hoe kan ik dan een nieuw dataview vullen met de gegevens uit het gesorteerde grid.

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-08 11:40

gorgi_19

Kruimeltjes zijn weer op :9

whoami schreef op 09 July 2003 @ 10:32:
[...]


Dat dacht ik ook al. Vandaar m'n eeste reply in dit topic.

Zet eens het bewaren van je dataview in je sessie-variabele in de Page_Unload en het ophalen in de page_load.
De page_unload wordt nl. uitgevoerd als alle andere events uitgevoerd zijn. Op dat moment zal de dataview dus opnieuw gesorteerd zijn.
Sowieso zou hij al beschikbaar moeten zijn in de SortCommand handler. (welke idd wel na het Load event komt.)

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • EfBe
  • Registratie: Januari 2000
  • Niet online
Verwijderd schreef op 09 juli 2003 @ 09:17:
Ik heb een grid waar het mogelijk is om te sorteren.

Dit gebeurt middels de volgende code:
Bij de 2e writeline moet er natuurlijk een ander product worden gevonden dan bij de 1e writeline, maar dit is niet het geval.
Hoe zorg ik ervoor dat de DataView wordt aangepast?
De dataview is een view op een bak data. Wil je een andere view, dan moet je de view aanpassen, de table blijft t.a.t. hetzelfde. Daarom gebruik je ook een dataview, zodat je daar verschillende dingen mee uit kan halen en een andere view op dezelfde data niet in de weg staat.

Je moet dus de dataview sort expressie wijzigen en de dataview row uitlezen, niet de datatable.

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


Verwijderd

Topicstarter
Een simpel alternatief:

DataGridItem dgi = dg_producten.Items[selectedIndex];
string productid = dgi.Cells[8].Text;

Dan krijg ik de waarde zoals deze in het grid gepresenteerd staat

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-08 11:40

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op 09 juli 2003 @ 11:01:
Een simpel alternatief:

DataGridItem dgi = dg_producten.Items[selectedIndex];
string productid = dgi.Cells[8].Text;

Dan krijg ik de waarde zoals deze in het grid gepresenteerd staat
In een aantal gevallen is dit idd een oplossing die ook werkt. Formatting van data, of nummers in het algemeen kan roet in het eten gooien.

Bij nader inzien sluit ik me ook bij whoami aan dat je echt van alles door elkaar lijkt te gooien wat er door elkaar te gooien valt.. :?

[ Voor 14% gewijzigd door gorgi_19 op 09-07-2003 11:11 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • whoami
  • Registratie: December 2000
  • Laatst online: 22:54
Verwijderd schreef op 09 July 2003 @ 11:01:
Een simpel alternatief:

DataGridItem dgi = dg_producten.Items[selectedIndex];
string productid = dgi.Cells[8].Text;

Dan krijg ik de waarde zoals deze in het grid gepresenteerd staat
Ik snap niet dat je dit als 'alternatief' ziet.
Eerst wou je je gegevens sorteren en de eerste row uitlezen. Met deze code ga je een geselecteerde row uitlezen? :?

https://fgheysels.github.io/


  • LoekD
  • Registratie: Augustus 2000
  • Laatst online: 09-08 16:24
Probeer voor de grap eens de
"grid.EnableViewState"-property false te maken.

loading...


  • whoami
  • Registratie: December 2000
  • Laatst online: 22:54
LoekD schreef op 09 juli 2003 @ 22:38:
Probeer voor de grap eens de
"grid.EnableViewState"-property false te maken.
Dat heeft er -imho- niets mee te maken aangezien de topicstarter het geeft over de code-regels ivm Debug.WriteLine().

De enableviewstate zorgt ervoor dat de viewstate van de control bewaart wordt na een postback. Echter, als de control gerebinded wordt voor een postback, heeft die viewstate meestal geen enkele nut.

https://fgheysels.github.io/


  • LoekD
  • Registratie: Augustus 2000
  • Laatst online: 09-08 16:24
Dat lijkt het inderdaad niet te zijn...
Maar dit werkt dan?:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
private void sorteren(string sortExpression)
        {    
            bool desc = (bool) Session["descending"];    
          
            DataView dasc = Tabel.DefaultView, ddesc = Tabel.DefaultView;
             dasc.Sort == sortExpression + " ASC";
             ddesc.Sort == sortExpression + " DESC";

            Debug.WriteLine(dv.Table.Rows[0][1].ToString());
            if(desc)
            {
                 Session["descending"] = true;
                 dg_producten.DataSource = ddesc;
            }
            else
            {            
                   Session["descending"] = false;  
               dg_producten.DataSource = dasc;
             }

               dg_producten.DataBind();
               Debug.WriteLine(dv.Table.Rows[0][1].ToString());
            }

loading...


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-08 11:40

gorgi_19

Kruimeltjes zijn weer op :9

Ik vind het sowieso ranzig om de sorteervolgorde op te slaan in een Session. Daar is die niet voor bedoeld. Neem Context of Viewstate, afhankelijk van wat je wilt.

Verder is het ook volstrekt nutteloos om Session["descending"] = true; en Session["descending"] = false; gebruiken; ze overschrijven zichzelf toch altijd met dezelfde waarde.

Ook vraag ik me af of er uberhaupt verschil zal zitten tussen de eerste en de tweede Debug.WriteLine(dv.Table.Rows[0][1].ToString());

[ Voor 94% gewijzigd door gorgi_19 op 10-07-2003 11:14 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo

Pagina: 1