【问题标题】:gridview delete and allowpaging issuegridview 删除和允许分页问题
【发布时间】:2009-02-10 21:14:58
【问题描述】:

我已经搜索过,现在不知道我的问题的原因。

这是我的问题的简短版本。

我有一个 gridview、一个用于打开/关闭 gridview 分页的复选框以及一个带有选择和删除查询的 sql 数据源。如果分页打开,我可以单击删除网格视图中的一行,它运行并且页面刷新没有问题。如果我为 gridview 关闭分页,当我对 sql server 中的表执行直接查询但页面无法重新加载时,删除查询似乎会运行。我收到以下错误:

指定的参数不在 有效值的范围。参数名称: 值描述:一个未处理的 期间发生异常 执行当前的 Web 请求。 请查看堆栈跟踪以获取更多信息 有关错误和位置的信息 它起源于代码。

异常详情: System.ArgumentOutOfRangeException: 指定的参数超出了 有效值的范围。参数名称: 价值

来源错误:

产生了一个未处理的异常 在当前执行期间 网络请求。有关的信息 异常的起源和位置 可以使用异常识别 下面的堆栈跟踪。

堆栈跟踪:

[ArgumentOutOfRangeException: 指定的参数超出了 有效值的范围。参数名称: 价值]
System.Web.UI.WebControls.GridView.set_SelectedIndex(Int32 价值)+280
System.Web.UI.WebControls.GridView.HandleDeleteCallback(Int32 受影响的行,例外 ex) +352
System.Web.UI.DataSourceView.Delete(IDictionary 键,IDictionary oldValues, 数据源视图操作回调 回调)+119
System.Web.UI.WebControls.GridView.HandleDelete(GridViewRow 行,Int32 行索引)+938
System.Web.UI.WebControls.GridView.HandleEvent(EventArgs e, Boolean CausesValidation, String 验证组)+1152
System.Web.UI.WebControls.GridView.RaisePostBackEvent(字符串 事件参数)+190
System.Web.UI.WebControls.GridView.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(字符串 eventArgument) +7
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler 源控件,字符串事件参数) +11 System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +172
System.Web.UI.Page.ProcessRequestMain(布尔值 includeStagesBeforeAsyncPoint,布尔值 includeStagesAfterAsyncPoint) +4920

这是页面代码:

<asp:SqlDataSource ID="dsSQL_ClaimsDetail" runat="server" ConnectionString="<%$ ConnectionStrings:activeDB_Connection %>"
        DeleteCommand="DELETE FROM [tblReturnClaimDetail] WHERE [ID] = @ID" ProviderName="<%$ ConnectionStrings:activeDB_Connection.ProviderName %>"
        SelectCommand="SELECT ID, HeaderID, CustomerSKUData, NikeInvoiceOrSalesOrderNumber, StyleandColorCode, StyleCode, ColorCode, StyleName, WholesaleDolrs, OriginalWholesaleDolrsPerUnit, Units, AccountDiscDolrsPerUnit, TotalNetPriceDolrs, HandlingandProcessing, Negotiated, NegotiatedReason, NegotiatedOptionType, NegotiatedOptionValue, FinalUnitPrice, FinalDolrs, FinalStandardDolrs, UpdateTime, UpdateUser, BatchUser, Approved, Denied, Pending, ClaimDisposition, FinalDecisionDate, ClaimRecordNumber, ASMName, Category, Gender, Other1, Other2, Other3, GBURegion, Division, BudgetManagerName, ClaimsBudgetYear, ClaimsBudgetQuarter, ApprovedDate, ReconciledBy, ReconciledDate, ReconcileOrigionalLineID FROM tblReturnClaimDetail WHERE (HeaderID = @claimID)">
        <DeleteParameters>
            <asp:Parameter Name="ID" />
        </DeleteParameters>
    <SelectParameters>
            <asp:ControlParameter ControlID="lbl_ClaimNumber" Name="claimID" PropertyName="Text" />
        </SelectParameters>
    </asp:SqlDataSource>
    <asp:CheckBox ID="chkbox_detailPagerToggle" runat="server" Text="View all styles at once" Visible="True" AutoPostBack="True" Checked="True" />&nbsp;</div>
    <asp:GridView ID="grid_Details" runat="server" AutoGenerateColumns="False"
        DataKeyNames="ID" DataSourceID="dsSQL_ClaimsDetail">
        <Columns>
            <asp:CommandField SelectText="Edit" ShowSelectButton="True">
                <HeaderStyle BackColor="Transparent" />
            </asp:CommandField>
            <asp:BoundField DataField="ID" HeaderText="ID" InsertVisible="False" ReadOnly="True"
                SortExpression="ID" />
            <asp:BoundField DataField="NikeInvoiceOrSalesOrderNumber" HeaderText="Nike Invoice /&lt;br /&gt;Sales Order #"
                HtmlEncode="False" SortExpression="NikeInvoiceOrSalesOrderNumber" />
            <asp:BoundField DataField="StyleCode" HeaderText="Style Code" SortExpression="StyleCode" />
            <asp:BoundField DataField="ColorCode" HeaderText="Color Code" SortExpression="ColorCode" />
            <asp:BoundField DataField="StyleName" HeaderText="Style Name" SortExpression="StyleName" />
            <asp:BoundField DataField="GBURegion" HeaderText="Channel" SortExpression="GBURegion" />
            <asp:BoundField DataField="Category" HeaderText="Category" SortExpression="Category" />
            <asp:BoundField DataField="Gender" HeaderText="Gender" SortExpression="Gender" />
            <asp:BoundField DataField="OriginalWholesaleDolrsPerUnit" DataFormatString="{0:c2}"
                HeaderText="WholeSale&lt;br /&gt;$/Unit" HtmlEncode="False" SortExpression="OriginalWholesaleDolrsPerUnit" />
            <asp:BoundField DataField="Units" HeaderText="Units" SortExpression="Units" />
            <asp:BoundField DataField="AccountDiscDolrsPerUnit" DataFormatString="{0:c2}" HeaderText="Discount&lt;br /&gt;$/Unit"
                HtmlEncode="False" SortExpression="AccountDiscDolrsPerUnit" />
            <asp:BoundField DataField="HandlingandProcessing" DataFormatString="{0:c2}" HeaderText="Handling &amp;&lt;br /&gt;Processing"
                HtmlEncode="False" SortExpression="HandlingandProcessing" />
            <asp:CheckBoxField DataField="Negotiated" HeaderText="Negotiated" SortExpression="Negotiated" />
            <asp:BoundField DataField="NegotiatedReason" HeaderText="Negotiated Reason" SortExpression="NegotiatedReason" />
            <asp:BoundField DataField="NegotiatedOptionType" HeaderText="Negotiated Type" SortExpression="NegotiatedOptionType" />
            <asp:BoundField DataField="NegotiatedOptionValue" HeaderText="Negotiated Value" SortExpression="NegotiatedOptionValue" />
            <asp:BoundField DataField="FinalDolrs" DataFormatString="{0:c2}" HeaderText="Final $ for Product"
                HtmlEncode="False" SortExpression="FinalDolrs">
                <ItemStyle Font-Bold="True" />
            </asp:BoundField>
            <asp:CommandField ShowDeleteButton="True">
                <HeaderStyle BackColor="Transparent" />
            </asp:CommandField>
        </Columns>
    </asp:GridView>

这 3 个对象的唯一代码位于复选框上:

Protected Sub chkbox_detailPagerToggle_CheckedChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles chkbox_detailPagerToggle.CheckedChanged
    If Me.chkbox_detailPagerToggle.Checked = True Then
        Me.grid_Details.AllowPaging = False
    Else
        Me.grid_Details.AllowPaging = True
    End If
End Sub

任何能让我找到正确方向的想法都会很棒,因为我不知道下一步该去哪里解决这个问题。

【问题讨论】:

    标签: asp.net vb.net


    【解决方案1】:

    看起来 GridView 对要删除的行数感到困惑,并试图将所选索引设置为无效值。

    是否只有在最后一行被删除时才会出现?

    在您执行删除操作时是否触发了任何触发器?这可能会导致 @@RowCount 搞砸。尝试在删除调用之前添加“SET NOCOUNT OFF”并在删除调用之后添加“SET NOCOUNT ON”。

    我猜,但也许随着分页,SetSelectedIndex 代码的工作方式略有不同。

    【讨论】:

    • 我什至没有想过检查触发器。我刚刚检查并没有修复它,谢谢!
    • 您是否考虑过使用 SProcs 而不是直接的 SQL?那些 NO COUNTS 现在会变得非常混乱。
    • 我已经考虑过了,正在努力过渡到存储过程,但我继承了这个项目,目前有比目前更大的问题要解决,一个正在尝试开始规范化数据库最多几张桌子。
    猜你喜欢
    • 2013-02-12
    • 2011-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-30
    相关资源
    最近更新 更多