Toon posts:

[ASP.NET] sort/paging events met AutoGenerateColumns = false

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben vrij nieuw met ASP.NET maar ik vind de mogelijkheden toch wel intressant dus ben ik er toch maar eens mee aan de slag gegaan. Nou ben ik bezig een DataGrid te maken met sorteer en paging functies erin en zolang ik AutoGenerateColumns op true laat staan gaat het allemaal goed, maar wanneer ik mijn eigen kolommen toevoeg en AutoGenerateColumns op false zet, krijg ik alleen resultaat wanneer de pagina voor de eerste keer geladen wordt, en wanneer ik op een andere pagina klik, of op een kolomnaam om te sorteren, krijg ik een lege pagina terug.

Nu las ik ergens dat de kolommen al bij Page_Init aangemaakt moeten worden en de databind instructie bij de Page_Load uitgevoerd moet worden, maar dit levert hetzelfde resultaat.

Iemand, suggesties of ervaringen hiermee?

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 18:39

gorgi_19

Kruimeltjes zijn weer op :9

Je doet iets fout, maar zonder relevante code kunnen we niets zinnigs zeggen.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
    public void Page_Init( Object Source, EventArgs E ) {       
        RecordSet rs = DataBase.SelectOneValue( "SELECT COUNT( * ) AS count FROM Customers" );

        dg.AutoGenerateColumns = false; // Do not generate the columns automaticly from the datasource
        dg.AllowSorting = true; // allow sorting by clicking on a column header
        dg.AllowPaging = true; // allow a datasource to spread over multiple pages
        dg.AllowCustomPaging = true; // ^
        dg.PageSize = 20; // show 20 items from a datasource at a page
        dg.VirtualItemCount = rs.GetInt32( "count" ); // set the total number of items from all data in a query
        dg.PagerStyle.Mode = PagerMode.NumericPages; // user can view data pages by clicking on numbers
        dg.PageIndexChanged += new DataGridPageChangedEventHandler( this.Handle_IndexChange );
        dg.SortCommand += new DataGridSortCommandEventHandler( this.Handle_Sort );
        dg.ItemDataBound += new DataGridItemEventHandler( this.Handle_ItemDataBound );
        myForm.Controls.Add( dg );  
    }

    public void Page_Load( Object Source, EventArgs E ) {
        if ( !IsPostBack ) {
            ViewState["sortField"] = "CustomerID";
            ViewState["sortDirection"] = "ASC";
            dg.DataSource = createDataSource();
            dg.DataBind();
        }   
    }


En het probleem is dus dat this.Handle_Sort en this.Handle_IndexChange niet worden uitgevoerd ( Ze treden dus helemaal niet op ) wanneer ik AutoGenerateColumns op false zet, laat ik deze default op true staan dan werkt het echter gewoon

  • Mastermind
  • Registratie: Februari 2000
  • Laatst online: 29-11 15:35
Heb je wel de DataKey in de properties op de Primary Key van de resultset gezet?

Verwijderd

en al die properties en eventhandlers kan je gewoon in de markup definiëren, werkt veel properder

Verwijderd

Je bind alleen als het geen postback is. Tweede keer geen data

[ Voor 6% gewijzigd door Verwijderd op 26-11-2006 12:40 ]


Verwijderd

Topicstarter
DataKey wordt ingesteld, echter niet op de Primary Key maar op de kolomnaam, ik heb ook niet het idee dat ik daar iets fout doe. In de markup definieren is geen optie omdat de pagina dynamisch opgebouwd moet worden en er voor het laden van de pagina niet bekend is welke data er in het grid komt.
En ik doe de eerste databind inderdaad alleen zonder postback, maar... ik heb wel eventhandlers voor het sorteren en om naar de volgende pagina's te gaan. Daarin staat ook een databind, en als het goed is zouden die eventhandlers er dus voor moeten zorgen dat het grid alsnog getoond wordt.

Maar ik heb er al even mee zitten spelen en ik kwam erachter dat de fase waarin events uitgevoerd worden pas na de page_load is. Volgens mij moet dit echter niet uitmaken want wanneer ik AutoGenerateColumns of true zet dan werkt het gewoon precies zoals ik wil. Zet ik AutoGenerateColumns op false, dan lijken de events totaal niet op te treden aangezien een response.write in de events geen output oplevert. Hoe is dit toch mogelijk?

Nog even getest, als ik de databind instructie altijd uitvoer in de page_load, en dus niet alleen op postback, dan worden de waardes die bij de events ingesteld worden zoals de kolom waarop gesorteerd moet worden of de pagina index niet direct meegenomen. Ze worden dan ingesteld, maar omdat dit na de databind() gebeurd is daar op het scherm nog niks van te zien, pas na het volgende event worden de waardes van de vorige ronde meegenomen. Dan zou je zeggen dat ik die databind dus in die events moet uitvoeren omdat de waardes dan wel goed zijn... Maar zonder databind() in de page_load, uberhaupt geen optredende events.

[ Voor 27% gewijzigd door Verwijderd op 27-11-2006 10:58 ]


Verwijderd

Topicstarter
Ok problem solved..., als je dus gebruik maakt van eigen gedefinieerde kolommen in je datagrid, dan MOET je ervoor zorgen dat deze kolommen in de OnInit fase aangemaakt worden. Doe je dit niet, dan treden de sort en paging events NIET op.
Pagina: 1