2009-10-03 6 views
3

J'ai un gridview de base avec la pagination activée. J'ai 11 lignes dans ma base de données et la taille de la page gridview est 10. Quand je viens à la page, il montre 10 lignes, et dans mon pager, il me montre sur la page un avec un lien vers une deuxième page. Lorsque je clique sur la deuxième page, elle rafraîchit la page et passe à la page 2 et affiche la 11e rangée isolée. Lorsque je mets un panneau de mise à jour autour de celui-ci, cependant, il laisse tomber la dernière rangée. Quand je viens à la page, il montre la même chose que sans le panneau de mise à jour. Il montre 10 lignes avec les pages 1 et 2 sur le pager. Quand je clique sur la page 2, cependant, c'est une chose ajax, mais n'affiche pas le dernier enregistrement sur la deuxième page. Ensuite, si je passe de la page 2 à la page 1, il n'affiche que 9 lignes au lieu des 10 qu'il affichait.GridView Page dans UpdatePanel drop 1 row

Pour une raison quelconque, lorsque j'ai un panneau de mise à jour autour de ma grille, une fois que vous avez affiché une page, il n'affiche jamais la dernière ligne. J'ai essayé toutes les différentes combinaisons de RenderMode, ChildrenAsTriggers et UpdateMode en vain. J'ai également un formulaire sur la page qui vous permet d'ajouter de nouvelles lignes à la base de données, et par conséquent la grille, ainsi qu'un lien d'édition et de suppression dans la grille, tout dans le panneau de mise à jour. Lorsque j'ajoute une nouvelle ligne via le formulaire ou modifier/supprimer, cela n'arrive pas ... cela n'arrive que lorsque je page.

Avez-vous des idées pour lesquelles la vue en grille n'affichera pas le dernier enregistrement/la dernière ligne après la mise en page I seulement lorsque celle-ci se trouve dans un panneau de mise à jour?

Voici le code ...

ASPX

<asp:UpdatePanel runat="server" ID="uPnl" ChildrenAsTriggers="true" RenderMode="Block" UpdateMode="Always"> 
      <ContentTemplate> 
       <asp:Panel runat="server" ID="pnlAddComment" CssClass="addComment" DefaultButton="btnSubmitComment"> 
        <h1 class="postComment">Post Comment</h1> 
        <asp:TextBox runat="server" ID="txtName" CssClass="txtName"></asp:TextBox> 
        <ajaxToolkit:TextBoxWatermarkExtender ID="txtNameW" runat="server" 
          TargetControlID="txtName" 
          WatermarkText="- Type your name here -" 
          WatermarkCssClass="txtNameWatermark" /> 
        <asp:RequiredFieldValidator runat="server" ID="reqName" ControlToValidate="txtName" Display="Dynamic" ErrorMessage="Please enter your name" ValidationGroup="comment"></asp:RequiredFieldValidator> 
        <asp:TextBox runat="server" ID="txtComment" TextMode="MultiLine" CssClass="txtComment"></asp:TextBox> 
        <ajaxToolkit:TextBoxWatermarkExtender ID="TBWE2" runat="server" 
          TargetControlID="txtComment" 
          WatermarkText="- Write anything you'd like about this event -" 
          WatermarkCssClass="txtCommentWatermark" /> 
        <asp:RequiredFieldValidator runat="server" ID="reqComment" ControlToValidate="txtComment" Display="Dynamic" ErrorMessage="Please enter your comment" ValidationGroup="comment"></asp:RequiredFieldValidator> 
        <div class="buttons"> 
        <asp:Button runat="server" ID="btnSubmitComment" ValidationGroup="comment" Text="Submit Comment" /> 
        <span class="loader">Saving</span>         
       </asp:Panel> 
       <h1>Recent Comments</h1> 
       <a name="comments">&nbsp;</a> 
       <asp:GridView runat="server" ID="gvComments" DataKeyNames="CommentID" PagerSettings-Position="TopAndBottom" AllowPaging="true" PageSize="10" AutoGenerateColumns="false" GridLines="None" CssClass="comments"> 
        <Columns> 
         <asp:TemplateField> 
          <ItemTemplate> 
           <div class="comment user"> 
            <p> 
             <img src="images/icon.gif" width="46" height="55" /> 
             <%#Eval("UserComment")%> 
             <span> 
              Posted by <%#Eval("UserName")%> <br/> 
              on <%#Format(Eval("DateCreated"), "MM/dd/yyyy")%> at <%#Format(Eval("DateCreated"), "h:mm tt")%> 
             </span> 
             <asp:LinkButton runat="server" CausesValidation="false" ID="lnkEdit" CssClass="edit" CommandName="Edit" Text="Edit"></asp:LinkButton> 
             <asp:LinkButton runat="server" ID="lnkDelete" CommandArgument='<%#Eval("CommentID")%>' CssClass="delete" OnClientClick="return confirm('Are you sure you want to delete this comment?');" CausesValidation="false" OnClick="DeleteComment" Text="Delete"></asp:LinkButton> 
            </p> 
           </div>       
          </ItemTemplate> 
          <EditItemTemplate> 
           <div class="comment user"> 
            <p> 
             <img src="images/icon.gif" width="46" height="55" /> 
             <label>Name:</label> 
             <asp:TextBox runat="server" ID="txtNameEdit" Width="240" Text='<%#Eval("UserName")%>'></asp:TextBox><br /> 
             <label>Comment:</label> 
             <asp:TextBox runat="server" TextMode="MultiLine" ID="txtCommentEdit" Width="240" Height="100" Text='<%#Eval("UserComment") %>'></asp:TextBox> 
             <asp:LinkButton runat="server" ID="lnkCancel" CommandName="Cancel" CssClass="cancel" CausesValidation="false" Text="Cancel"></asp:LinkButton> 
             <asp:LinkButton runat="server" ID="lnkUpdate" CommandName="Update" CssClass="update" CausesValidation="false" Text="Update"></asp:LinkButton> 
            </p> 
           </div>  
          </EditItemTemplate> 
         </asp:TemplateField> 
        </Columns> 
        <PagerStyle CssClass="grdFooter" HorizontalAlign="right" /> 
        <PagerSettings PageButtonCount="7" /> 
       </asp:GridView> 
      </ContentTemplate> 
     </asp:UpdatePanel> 

code VB Derrière

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
    If Not IsPostBack Then 
     bindComments() 
    End If 
End Sub 
Private Sub bindComments() 
    gvComments.DataSource = dataaccess.getdataset("SELECT * FROM Comments ORDER BY DateCreated DESC", Data.CommandType.Text) 
    gvComments.DataBind() 
End Sub 
Protected Sub gvComments_RowEditing(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewEditEventArgs) Handles gvComments.RowEditing 
    gvComments.EditIndex = e.NewEditIndex 
    bindComments() 
End Sub 
Protected Sub gvComments_RowCancelingEdit(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCancelEditEventArgs) Handles gvComments.RowCancelingEdit 
    gvComments.EditIndex = -1 
    bindComments() 
End Sub 
Protected Sub gvComments_PageIndexChanging(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewPageEventArgs) Handles gvComments.PageIndexChanging 
    gvComments.PageIndex = e.NewPageIndex 
    bindComments() 
End Sub 
Protected Sub btnSubmitComment_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnSubmitComment.Click 
    Dim userType As String = "attendee" 
    If Not IsNothing(Request.QueryString("user")) AndAlso Request.QueryString("user").Length > 0 Then 
     userType = Request.QueryString("user") 
    End If 
    dataaccess.NoReturnQuery("INSERT INTO Comments (UserName, UserComment, UserType) VALUES ('" & txtName.Text.Replace("'", "''") & "','" & txtComment.Text.Replace("'", "''").Replace(vbCrLf, "<br />") & "','" & userType & "')", Data.CommandType.Text) 
    txtComment.Text = "" 
    txtName.Text = "" 
    gvComments.PageIndex = 0 
    bindComments() 
End Sub 
Sub DeleteComment(ByVal sender As Object, ByVal e As System.EventArgs) 
    Dim lnk As LinkButton = TryCast(sender, LinkButton) 
    If Not IsNothing(lnk) AndAlso IsNumeric(lnk.CommandArgument) Then 
     dataaccess.NoReturnQuery("DELETE FROM Comments WHERE CommentID = " & lnk.CommandArgument, Data.CommandType.Text) 
     bindComments() 
    End If 
End Sub 
Protected Sub gvComments_RowUpdating(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewUpdateEventArgs) Handles gvComments.RowUpdating 
    Dim row As GridViewRow = gvComments.Rows(e.RowIndex) 
    Dim txtCommentEdit As TextBox = CType(row.FindControl("txtCommentEdit"), TextBox) 
    Dim txtNameEdit As TextBox = CType(row.FindControl("txtNameEdit"), TextBox) 
    dataaccess.NoReturnQuery("UPDATE Comments SET UserComment = '" & txtCommentEdit.Text.Replace("'", "''").Replace(vbCrLf, "<br />") & "', UserName = '" & txtNameEdit.Text.Replace("'", "''") & "' WHERE CommentID = " & gvComments.DataKeys(e.RowIndex).Value, Data.CommandType.Text) 
    gvComments.EditIndex = -1 
    bindComments() 
End Sub 
Protected Sub gvComments_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles gvComments.RowDataBound 
    Dim lnkDelete As LinkButton = CType(e.Row.FindControl("lnkDelete"), LinkButton) 
    If Not IsNothing(lnkDelete) Then 
     If Request.QueryString("user") = "admin" Then 
      lnkDelete.Visible = True 
     Else 
      lnkDelete.Visible = False 
     End If 
    End If 
    Dim lnkEdit As LinkButton = CType(e.Row.FindControl("lnkEdit"), LinkButton) 
    If Not IsNothing(lnkEdit) Then 
     If Request.QueryString("user") = "admin" Then 
      lnkEdit.Visible = True 
     Else 
      lnkEdit.Visible = False 
     End If 
    End If 
End Sub 
+0

Can vous partagez le code? L'ASPX et le code derrière pourraient aider. –

+0

J'ai ajouté mon code. Merci pour l'aide Troy. – vipergtsrz

Répondre

2

Essayez ceci à partir du code-behind sur Page_Load:

ScriptManager.RegisterAsyncPostBackControl(gvComments); 
Questions connexes