【问题标题】:GridView Page in UpdatePanel dropping 1 rowUpdatePanel 中的 GridView 页面删除 1 行
【发布时间】:2009-10-03 17:32:34
【问题描述】:

我有一个启用分页的基本网格视图。我的数据库中有 11 行,gridview 的页面大小为 10。当我进入页面时,它显示 10 行,在我的寻呼机中,它在第一页显示我,并带有指向第二页的链接。当我单击第二页时,它会刷新页面并转到第 2 页并显示第 11 个孤独的行。

但是,当我在它周围放置一个更新面板时,它会删除最后一行。当我来到页面时,它显示与没有更新面板相同。它在寻呼机上显示 10 行,第 1 页和第 2 页。但是,当我单击第 2 页时,它确实是 ajax 的事情,但不会在第 2 页上显示最后一条记录。然后,如果我从第 2 页回到第 1 页,它只显示 9 行,而不是以前显示的 10 行。

由于某种原因,当我的 gridview 周围有一个更新面板时,在您翻页一次后,它永远不会显示最后一行。我尝试了 RenderMode、ChildAsTriggers 和 UpdateMode 的所有不同组合,但均无济于事。我在页面上还有一个表单,允许您将新行添加到数据库,因此 gridview 以及 gridview 内的编辑和删除链接,所有这些都在更新面板中。当我通过表单添加新行或编辑/删除时,这不会发生......它只会在我分页时发生。

任何想法为什么 gridview 仅在更新面板内时才会显示我页面后的最后一条记录/行?

这里是代码...

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>

背后的VB代码

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

【问题讨论】:

  • 你能分享代码吗? ASPX 和后面的代码都会有所帮助。
  • 我添加了我的代码。感谢特洛伊的帮助。

标签: c# asp.net gridview updatepanel paging


【解决方案1】:

从 Page_Load 上的代码隐藏中试试这个:

ScriptManager.RegisterAsyncPostBackControl(gvComments);

【讨论】:

    猜你喜欢
    • 2019-04-18
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 2013-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多