web-dev-qa-db-fra.com

L'événement déclenché PageIndexChanging GridView 'GridView1' qui n'a pas été géré

J'ai créé:

  • une page maître et une page de contenu appelée Détail.
  • Activation d'un clic sur un bouton, affichage des données en mode grille.
  • En mode grille, les colonnes sont générées automatiquement.
  • Je voulais afficher 11 colonnes en mode Grille, mais leur taille dépasse la taille de la page .

Que faire pour cela?

J'ai créé un fichier d'assistance SQL pour le code de connexion à la base de données et en appelant cette méthode, sans utiliser sqldatasource pour la connexion.

Quand j'essaie de faire de la pagination, obtenir erreur

L'événement déclenché PageIndexChanging GridView 'GridView1' qui n'était pas Géré.

11
Jui Test

Vous devez déclarer une méthode sur votre code derrière qui gère l'événement PageIndexChanging.

Quelque chose de semblable à ceci:

protected void GridView1_PageIndexChanging (object sender, GridViewPageEventArgs  e)
{
    GridView1.PageIndex = e.NewPageIndex;
    bindGridView(); //bindgridview will get the data source and bind it again
}

private void bindGridView()
{
     GridView1.DataSource=getData();
     GridView1.DataBind();
}

Fournissant un exemple de code:

    protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        GridView1.PageIndex = e.NewPageIndex;
        bindGridView(); //bindgridview will get the data source and bind it again
    }

    protected void Page_Load(object sender , EventArgs e)
    {
        if(!IsPostBack)
         bindGridView();

    }
    //this is some sample data 
    private void bindGridView()
    {
        DataTable t = new DataTable();
        t.Columns.Add("Col1");
        t.Columns.Add("Col2");
        DataRow r = null;
        for (int i = 0; i < 25; i++)
        {
            r = t.NewRow();
            r.ItemArray = new object[] { "Val" + i, " Another " + i };
            t.Rows.Add(r);
        }
        GridView1.DataSource = t;
        GridView1.DataBind();
    }

Et voici le balisage:

<asp:GridView OnPageIndexChanging="GridView1_PageIndexChanging" AllowPaging="true" PageSize="10" ID="GridView1" runat="server" AutoGenerateColumns="true">

Produit ceci:

enter image description here

22
Icarus

Pour la pagination, vous pouvez utiliser OnPageIndexChanging pour cela ....

Par exemple 

vous devez utiliser OnPageIndexChanging = "gvdetails_PageIndexChanging" dans votre GridView ...

Vous devez écrire ci-dessous le code dans event dans le code behind like

protected void gvdetails_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
    gvdetails.PageIndex = e.NewPageIndex;
    BindData();
}

Pour plus de détails, vous pouvez vérifier le lien ci-dessous ici, je me sers de la page changement d'index dans mon article ...

Ici j'utilise PageIndexChange

J'espère que cela vous aidera ... Partagez-le avec d'autres ... Merci!

2
user2508590

C'est la réponse finale:

Imports System.Collections.Generic ' library

Protected Sub grdEmployees_PageIndexChanging1(ByVal sender As Object, ByVal e As
System.Web.UI.WebControls.GridViewPageEventArgs) Handles grdEmployees.PageIndexChanging
    grdEmployees.PageIndex = e.NewPageIndex
    LoadEmployeeList() 'FUNCTION FOR DATASET
    grdEmployees.DataBind()

End Sub
1
Sheldon Sinclair

vous ajoutez simplement ceci à votre code:

protected void GridViewTrsEmail_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
    GridViewTrsEmail.PageIndex = e.NewPageIndex;
    GridViewTrsEmail.DataBind();


}
0
Imad

Pour résoudre ce problème, je devais examiner de plus près ma source de données et mon datakeys. J'ai un ensemble d'enregistrements renvoyés par SQL Server et ce que je faisais, je les lie à un POCO. Cette classe avait plusieurs propriétés publiques de type Integer. Ces entiers étaient mes datakeys sur la grille. J'ai remplacé leur type par une chaîne pour contourner le problème de casting.

0
jagn