2017-01-19 4 views
0

Ich habe Probleme mit meinen dynamischen Link-Schaltflächen in ASP-Seiten. Ich benutze sie, um ein benutzerdefiniertes Paging für eine Rasteransicht zu erstellen. Die Idee ist, dass ich 20 über 20 anzeigen möchte. Es funktioniert für die ersten 20. Wenn ich sie zeige, ist es in Ordnung. Dann drücke ich weiter für die Anzeige der nächsten 20. Wenn ich die nächsten drücken, es anzeigt mich, aber wenn eine Presse eine andere Taste als die ersten 20, es wird mich an der ersten 20Probleme feuern mein Ereignis für dynamische Link-Schaltflächen in ASP

Meiner init Seite:

override protected void OnInit(EventArgs e) 
{ 
    base.OnInit(e); 
    if (this.Tag.Equals("Shareholder")) 
    { 
     InitComponents(false); 
    } 

    /// Must be done everytime the page loads. 
    InitializeList(); 

    if (!IsPostBack) 
     InitializeUI(); 
} 

Init Link Tasten

private void InitComponents(Boolean Prev) 
{ 
     PanelPager.Controls.Clear(); 
     int nrInregistrari = Convert.ToInt32(DAActionar.CountActionari(11, LastBtnIndex)); 
     if (Prev == true) 
     { 
      LinkButton lnkPrev = new LinkButton(); 
      lnkPrev.Text = "Prev"; 
      PanelPager.Controls.Add(lnkPrev); 
     } 

     int BtnDeAfisat = 0; 
     if (nrInregistrari > BTN_PER_SERIE * PAGE_SIZE) 
     { 
      BtnDeAfisat = BTN_PER_SERIE; 
     } 
     else 
      BtnDeAfisat = nrInregistrari/PAGE_SIZE + 1; 

     for (int index = 1; index <= BtnDeAfisat; index++) 
     { 
      int pageNo = index + LastBtnIndex; 
      LinkButton lnk = new LinkButton(); 
      lnk.Click += new EventHandler(PageChange); 
      lnk.ID = "PageLink" + pageNo.ToString(); 
      lnk.CommandName = "Page"; 
      lnk.Text = " " + pageNo.ToString() + " "; 
      lnk.CommandArgument = index.ToString(); 

      PanelPager.Controls.Add(lnk); 

     } 

     LinkButton lnkNext = new LinkButton(); 
     lnkNext.Click += new EventHandler(NextPage); 
     lnkNext.Text = "Next"; 
     PanelPager.Controls.Add(lnkNext); 
     LastBtnIndex += BtnDeAfisat; 


} 

Ereignis für den nächsten Tasten

private void NextPage(object sender, EventArgs e) 
{ 
    InitComponents(true); 
} 

Pag eChange:

public void PageChange(object sender, EventArgs e) 
     { 
      int pageIndex = int.Parse((sender as LinkButton).CommandArgument) + 1; 
      object dataSource = GetDataSource(OwnerId, null, pageIndex); 
      PushData(dataSource); 

     } 
+0

"Dann drücke ich weiter, um die nächsten 20 anzuzeigen. Wenn ich als nächstes drücke, zeigt es mich an, aber wenn ich einen anderen Knopf drücke als die ersten 20, geht es mir bei den ersten 20." Konnte das Problem, mit dem Sie konfrontiert sind, nicht verstehen. Kannst du beschreibender sein? Was passiert, wenn Sie auf "andere als die ersten 20" klicken? Bedeutet es, dass Sie nicht weitergehen können, nachdem Sie die zweite 20-stellige Nummer erreicht haben? –

+0

Können Sie den Code der PageChange-Methode teilen? –

+0

@Chetan bearbeiten, die Idee ist, dass die ersten 20 Tasten, die in Init initialisieren sind arbeiten richtig, andere feuert nicht Ereignishandler – user7383186

Antwort

0

In ASP.NET nur die Kontrollen, die als Teil der Page_Load hinzugefügt werden, ihre Veranstaltungen angeschlossen haben und ausgeführt. Auch wenn ein serverseitiges Ereignis ausgeführt wird, postet sich die Seite selbst zurück und währenddessen wird page_load zuerst ausgeführt und dann wird der Event-Handler-Code ausgeführt.

Ihre erste Gruppe von Button-Events wurde also ausgeführt, weil sie als Teil von page_load an das Event angehängt wurden. Jetzt während des Ereignisses dieser Schaltfläche rufen Sie die Methode InitComponents auf. Wie ich während des Ereignisses erklärt habe, passiert page_load zuerst, was die InitComponents-Methode aufruft, die Button zu Panel hinzufügt, aber die InitComponents-Methode als Teil des Event-Handler-Codes erneut ausführt, die Controls aus dem Panel entfernt und sie erneut zum Panel hinzufügt.

Jetzt, da die während der zweiten Ausführung der InitComponents-Methode erstellten Steuerelemente nicht Teil von page_load sind, werden Flow-Ereignisse, die ihnen zugeordnet sind, nicht ausgelöst, wenn Sie darauf klicken. Es wird nur die Seite zurückgesendet, die InitComponents erneut ausgeführt hat und die neue Steuerelemente in der Anzeige erstellt. Ihre Ereignisse funktionieren ordnungsgemäß, da sie als Teil von page_load flow erstellt werden.

Verzeihung, wenn es dich verwirrt.

Jetzt wäre die Lösung, ein Steuerelement zu verwenden, das basierend auf der Anzahl der Elemente automatisch viele Schaltflächen für Sie erstellen kann und auch Ereignisse alle Male auslöst.

Ich habe gerade nichts für Sie arbeiten. Ich habe diesen Artikel mit funktionierendem Beispielcode gefunden, den Sie als Beispiel betrachten und in Ihrer Arbeit implementieren können.

http://www.aspsnippets.com/Articles/Implement-Paging-in-DataList-control-in-ASPNet.aspx

Das Beispiel wird erläutert, wie Seitenzahl angezeigt werden und auch, wie Sie Ihre Daten binden, basierend auf der ausgewählten Seitennummer.