[ASP.NET] User Control

Pagina: 1
Acties:

  • Tinuske
  • Registratie: September 2002
  • Laatst online: 08-02 20:43
Ik heb een pagina met daarop een user control en webgrid geplaats.
Deze user control zorgt voor de paginering van de webgrid.
In de page_load van de user control creeer ik dynamisch de buttons voor de paginering.

Aan de paginering van de webgrid meot je denken aan bijv de buttons : <<....1 2 3 ... >>
Als ik nu bijv op button 3 klik,
komt men

1. eerst in de pageload van webform.aspx
2. in de pageload van de user control
3. in de click event van de button (hier wordt huidige pagina opgehoogd)

Dit heeft tot gevolgd dat als men op de buttons klikt er de 1e keer niets gebeurd en de 2e keer pas de buttons worden aangepast (dan is namelijk het paginanummer pas aangepast , vanwege de 1e click event)

Als ik nu de buttons opnieuw zou creeeren bij de buttonclick, gaat het wel goed, maar dit zorgt ervoor dat de volgende buttonclick niet wordt afgevangen (moet namelijk in page_load gebeuren)

Hoe los ik dit probleem op ?

  • gorgi_19
  • Registratie: Mei 2002
  • Nu online

gorgi_19

Kruimeltjes zijn weer op :9

Bij de click moet je ook opnieuw die control rebinden c.q. updaten.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

Je bedoelt zo te zien ASP.NET, niet zozeer .NET in general :) Usercontrols in WinForms en WebForms verschillen nogal, dus ik fix de titel even :)

Professionele website nodig?


  • Tinuske
  • Registratie: September 2002
  • Laatst online: 08-02 20:43
even wat code

in webform1.aspx (Waar de usercontrol op staat )

code:
1
2
3
4
5
6
7
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        If Not Page.IsPostBack Then
            pagingcontrol1.AantalRecords = 400
            pagingcontrol1.PaginaGrootte = 20
            pagingcontrol1.HuidigePagina = 5
        End If
    End Sub


in pagingcontrol.aspx
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
25
26
27
28
29
30
31
    If Not Page.IsPostBack Then
            AantalPaginas = BerekenAantalPaginas()
        End If
        StelButtonsIn(HuidigePagina, AantalPaginas)
        End Sub

    Private Sub Pagina_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)

        HuidigePagina = Convert.ToInt32(CType(sender, LinkButton).CommandArgument)
    End Sub

    Public Sub StelButtonsIn(ByVal HuidigePagina As Integer, ByVal TotaalPaginas As Integer)

        ''button met << alleen laten zien als huidige pagina 4 of meer is
        If HuidigePagina > 3 Then
            Dim LinkButtonFirstPage As New LinkButton
            LinkButtonFirstPage.Text = "<<"
            LinkButtonFirstPage.CommandArgument = "1"
            AddHandler LinkButtonFirstPage.Click, AddressOf Pagina_Click
            PlaceHolder1.Controls.Add(LinkButtonFirstPage)
        End If

      If HuidigePagina > 2 Then
            Dim LinkButton2PagesBack As New LinkButton
            LinkButton2PagesBack.Text = HuidigePagina - 2
            LinkButton2PagesBack.CommandArgument = CType((HuidigePagina - 2), String)
            AddHandler LinkButton2PagesBack.Click, AddressOf Pagina_Click
            PlaceHolder1.Controls.Add(LinkButton2PagesBack)
        End If

//knip



@gorgi_19, hoe zou ik dat in deze code moeten doen ?

  • Tinuske
  • Registratie: September 2002
  • Laatst online: 08-02 20:43
schopje -> Dat rebinden, updaten van de usercontrol, hoe zou dat eruit zien in boventaande code ?
Kom er niet uit...

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

Je moet toch bij iedere wijziging in de bindings DataBind() op het bound control aanroepen? :?

Gewoon kwestie van even doen na ieder event :) Centrale private functie maken ervoor is wel het handigst, kan zijn dat je ook de DataSource nog even expliciet moet zetten.

Professionele website nodig?


  • Tinuske
  • Registratie: September 2002
  • Laatst online: 08-02 20:43
De databind methode wordt ook aangeroepen in de pageclick methode. (mvb een delegate)
Probleem is echter dat de buttons in de page_load van de usercontrol worden aangemaakt en dat men hierna pas in de click_Event komt.(waar deze geupdate worden)
Als je statische buttons zou gebruiken, zou je dit makkelijk kunnen wijzigen met een property, maar omdat ik dynamische buttons gebruik weet ik niet hoe ik dit moet oplossen
De label pagina [x] van [totaalpagina's ] wordt nu ook wel goed geupdate, omdat dit een statische label is met property , maar de buttons (dus welke enabled en welke text), lopen nu dus vanwege bovenstaande een ronde achter.
Nu is het zo: Ik begin op pagina 5 en ik klik op pagina 6, dan wijzigt de label in pagina 6 van 10, en met de buttons gebeurd niets. Klik ik nu op pagina 7, dan wordt de label pagina 7 van 10 en nu wordt button 6 disabled en de rest aangepast.

code:
1
2
3
4
5
6
7
    Private Sub Pagina_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
        HuidigePagina = Convert.ToInt32(CType(sender, LinkButton).CommandArgument)
        Dim Obj(0) As Object
        Obj(0) = HuidigePagina
        ''mbv delegate, wordt de databind methode in de webform pagina aangeroepen
        delUpdateHuidigePagina.DynamicInvoke(Obj)
    End Sub

  • Not Pingu
  • Registratie: November 2001
  • Laatst online: 01-04 20:36

Not Pingu

Dumbass ex machina

Een tip: er zijn wat bugs met het .NET framework dat bij SP1 zat, icm. SP2. Als je dus eerst Windows XP met SP1 geintegreerd hebt geinstalleerd en daarna SP2 eroverheen, kun je bijvoorbeeld tegenkomen dat een knop pas iets doet nadat je er 5 keer op geklikt hebt. Ik heb er op mijn workstation ook last van.

Certified smart block developer op de agile darkchain stack. PM voor info.


  • Tinuske
  • Registratie: September 2002
  • Laatst online: 08-02 20:43
Als ik op een button click komt ie wel in de event daarvan, maar de volgorde is :

1. eerst in de pageload van webform.aspx
2. in de pageload van de user control
3. in de click event van de button (hier wordt huidige pagina opgehoogd)

als de volgorde was 1,3,2 of 3,1,2 had ik geen probleem gehad met dynamische buttons. Maar geen problemen dus dat ie niet in een event komt.

  • Tinuske
  • Registratie: September 2002
  • Laatst online: 08-02 20:43
Ik heb ondertussen nog heel wat internetsite's afgespeurd en nieuwsgroepen doorgezocht, maar ook daar is er geen reactie/oplossing te vinden op dit probleem ?

Is de enige oplossing dan maar statische buttons gebruiken bij een usercontrol ?

  • TlighT
  • Registratie: Mei 2000
  • Laatst online: 22-03 10:40
Zoiets als dit werkt wel:
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
28
29
30
31
32
33
private LinkButton volgendePaginaButton;

public int HuidigePagina
{
    get
    {
        object pagina = ViewState["HuidigePagina"];
        return (pagina != null ? (int) pagina : 0);
    }
    set { ViewState["HuidigePagina"] = value; }
}

protected override void CreateChildControls()
{
    volgendePaginaButton = new LinkButton();
    volgendePaginaButton.Command += 
        new CommandEventHandler(volgendePaginaButton_Command);
    
    Controls.Add(volgendePaginaButton);
}

private void volgendePaginaButton_Command(object sender, CommandEventArgs e)
{
    HuidigePagina = int.Parse(e.CommandArgument.ToString())+1;
}

protected override void OnPreRender(EventArgs e)
{
    volgendePaginaButton.Text = HuidigePagina.ToString();
    volgendePaginaButton.CommandArgument = HuidigePagina.ToString();

    base.OnPreRender (e);
}

Hier wordt dus eerst de button geinstantieerd met de events, dan worden de events afgehandeld en daarna worden de properties van de linkbutton gezet.
Pagina: 1