0 votes

Problème de pagination de GridView

J'ai un GridView très simple sur l'une de mes pages avec le balisage suivant sur ma page .aspx :

<asp:GridView ID="gvNews" runat="server" AutoGenerateColumns="false" AllowPaging="true"
            AllowSorting="true" DataKeyNames="NewsID,VersionStamp" OnPageIndexChanging="gvNews_PageIndexChanging"
            OnRowCreated="gvNews_RowCreated">
            <Columns>
                <asp:BoundField HeaderText="News Title" DataField="NewsTitle"
                    SortExpression="NewsTitle" ReadOnly="true" />
                <asp:BoundField HeaderText="News Content" DataField="NewsContent"
                    SortExpression="NewsContent" ReadOnly="true" />
                <asp:BoundField HeaderText="Posted Date" DataField="InsertedDate"
                    SortExpression="InsertedDate" ReadOnly="True" />
                <asp:BoundField HeaderText="InsertedBy" DataField="InsertedBy" />
                <asp:TemplateField>
                    <ItemTemplate>
                        <asp:LinkButton ID="lbEdit" runat="server" Text="Edit" CommandName="Select" />
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
        </asp:GridView>

Voici le code de ma page .cs :

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

        private void LoadGrid()
        {
            gvNews.DataSource = GetNews();
            gvNews.DataBind();
        }

        protected void gvNews_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {

        }

        protected void gvNews_RowCreated(object sender, GridViewRowEventArgs e)
        {
            e.Row.Cells[3].Visible = false;
        }

Lors de l'événement RowCreated, j'essaie de masquer la colonne InsertedBy dans la grille. Ce code fonctionne correctement lorsque AllowPaging est réglé sur flase. Mais lorsque AllowPaging est réglé sur true, j'obtiens l'erreur suivante dans le gestionnaire d'événement RowCreated :

L'argument spécifié est en dehors de la plage des valeurs valides. Nom du paramètre : index

Quelles pourraient être les raisons de ce comportement ?

0voto

Perpetualcoder Points 7381

D'après ce que vous avez posté, votre valeur codée en dur de 3 dans l'événement RowCreated semble être le problème. Activez le traçage sur la page et voyez ce que vous obtenez. BTW les liens next->prev du pager provoquent également un postback et dans PageLoad vous ne chargez la grille que si ce n'est pas un postback, ce qui est le cas lorsque vous essayez de passer à la page suivante et que la ligne créée est déclenchée.

0voto

Zach Parrish Points 414

Vous devez écrire votre code comme suit :

protected void gvNews_RowCreated(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        e.Row.Cells[3].Visible = false;
    }
}

Avec un GridView, il y a différents types de lignes qui peuvent être créées et elles auront différents nombres de cellules, mais l'événement RowCreated se déclenchera pour toutes les lignes, vous devez donc limiter votre logique aux seules lignes de données dans ce cas.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X