在GridView中添加动态行时如何保持页面的滚动位置? [英] How to maintain scroll position of a page when add dynamic rows in GridView?

查看:61
本文介绍了在GridView中添加动态行时如何保持页面的滚动位置?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我的网页中,当我使用RowCommand在GridView中添加新行时,我在FooterTemplate中有一个LinkBut​​ton.LinkBut​​ton会进行部分回发,但是我的页面会丢失其当前滚动位置,并返回到页面顶部.在GridView中添加新项目时,应该如何保持页面滚动位置.

In my web page, I have an LinkButton inside FooterTemplate, when I Add new row in GridView by using RowCommand. LinkButton do partial postback but my page loses its current scroll position and return scroll to top of the page. How should I maintain my page scroll position when I add new Item in my GridView.

以下是我的屏幕输出:

下面是我的页面代码:

Aspx:

<%@页面标题="语言="C#" MasterPageFile =〜/Site.Master" AutoEventWireup ="true" CodeBehind ="Invoice.aspx.cs" Inherits ="RSMS.Users.发票%>

<asp:UpdatePanel ID="upItemDetail" runat="server">
<ContentTemplate>
    <asp:GridView
        ID="gvItemDetail"
        runat="server"
        Width="100%"
        ShowHeaderWhenEmpty="true"
        AutoGenerateColumns="false"
        EmptyDataText="No Data Found!"
        ShowFooter="False"
        BorderStyle="None"
        CellPadding="3"
        GridLines="Horizontal"
        SkinID="AHGridView"
        OnRowCommand="gvItemDetail_RowCommand">
        <Columns>
            <asp:TemplateField HeaderText="Item ID">
                <ItemTemplate>
                    <asp:Label ID="lblItemID" runat="server" Text='<%# Eval("Item_ID") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Item Name">
                <ItemTemplate>
                    <asp:Label ID="lblItemID" runat="server" Text='<%# Eval("Item_Name") %>'></asp:Label>
                </ItemTemplate>
                <EditItemTemplate>
                    <asp:TextBox
                        ID="txtItemName"
                        runat="server"
                        placeholder="Item Name"
                        CssClass="form-control"></asp:TextBox>
                    </div>
                <asp:HiddenField ID="hdnItemID" runat="server" Value="" ClientIDMode="Static" />
                    <div id="AutoCompleteItem"></div>
                    <%--<asp:RequiredFieldValidator
                    ID="rfvItemName"
                    runat="server"
                    ControlToValidate="txtItemName"
                    ErrorMessage="Item Name must be enter."
                    Display="None">
                </asp:RequiredFieldValidator>--%>
                    <ajaxToolkit:AutoCompleteExtender
                        ID="acetxtItemName"
                        runat="server"
                        ServiceMethod="GetItemID"
                        ServicePath="~/ApplicationWebService.asmx"
                        TargetControlID="txtItemName"
                        MinimumPrefixLength="1"
                        UseContextKey="false"
                        CompletionInterval="0"
                        EnableCaching="true"
                        CompletionSetCount="30"
                        FirstRowSelected="true"
                        CompletionListElementID="AutoCompleteItem"
                        OnClientItemSelected="ItemSelected">
                    </ajaxToolkit:AutoCompleteExtender>
                </EditItemTemplate>
                <FooterTemplate>
                    <asp:TextBox
                        ID="txtItemName"
                        runat="server"
                        placeholder="Item Name"
                        TabIndex="5"
                        CssClass="form-control"></asp:TextBox>
                    </div>
                <asp:HiddenField ID="hdnItemID" runat="server" Value="" ClientIDMode="Static" />
                    <div id="AutoCompleteItem"></div>
                    <%--<asp:RequiredFieldValidator
                    ID="rfvItemName"
                    runat="server"
                    ControlToValidate="txtItemName"
                    ErrorMessage="Item Name must be enter."
                    Display="None">
                </asp:RequiredFieldValidator>--%>
                    <ajaxToolkit:AutoCompleteExtender
                        ID="acetxtItemName"
                        runat="server"
                        ServiceMethod="GetItemID"
                        ServicePath="~/ApplicationWebService.asmx"
                        TargetControlID="txtItemName"
                        MinimumPrefixLength="1"
                        UseContextKey="false"
                        CompletionInterval="0"
                        EnableCaching="true"
                        CompletionSetCount="30"
                        FirstRowSelected="true"
                        CompletionListElementID="AutoCompleteItem"
                        OnClientItemSelected="ItemSelected">
                    </ajaxToolkit:AutoCompleteExtender>
                </FooterTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Sales Price">
                <ItemTemplate>
                    <asp:Label ID="lblItemSalesPrice" runat="server" Text='<%# Eval("Sale_Price") %>'></asp:Label>
                </ItemTemplate>
                <EditItemTemplate>
                    <asp:TextBox
                        ID="txtSalesPrice"
                        runat="server"
                        placeholder="Sales Price"
                        CssClass="form-control"></asp:TextBox>
                    <ajaxToolkit:FilteredTextBoxExtender ID="ftbeSalesPrice" runat="server"
                        TargetControlID="txtSalesPrice"
                        FilterType="Numbers"></ajaxToolkit:FilteredTextBoxExtender>
                    <%--<asp:RequiredFieldValidator
                    ID="rfvPrice"
                    runat="server"
                    ControlToValidate="txtPurchasePrice"
                    ErrorMessage="Purchase Price must be in numbers."
                    Display="None">
                </asp:RequiredFieldValidator>--%>
                </EditItemTemplate>
                <FooterTemplate>
                    <asp:TextBox
                        ID="txtSalesPrice"
                        runat="server"
                        placeholder="Sales Price"
                        Text='<%# Eval("Sale_Price") == null ? "0" : Eval("Sale_Price") %>'
                        TabIndex="6"
                        ClientIDMode="Static"
                        CssClass="form-control"></asp:TextBox>
                    <asp:HiddenField ID="hdnPurchase_Price" runat="server" ClientIDMode="Static" Value="0" />
                    <%--<ajaxToolkit:FilteredTextBoxExtender ID="ftbeSalesPrice" runat="server"
                    TargetControlID="txtSalesPrice"
                    FilterType="Numbers"></ajaxToolkit:FilteredTextBoxExtender>--%>
                    <%--<asp:RequiredFieldValidator
                    ID="rfvPurchasePrice"
                    runat="server"
                    ControlToValidate="txtPurchasePrice"
                    ErrorMessage="Purchase Price must be in numbers."
                    Display="None">
                </asp:RequiredFieldValidator>--%>
                </FooterTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Item QTY">
                <ItemTemplate>
                    <asp:Label ID="lblItemQTY" runat="server" Text='<%# Eval("Item_Qty") %>'></asp:Label>
                </ItemTemplate>
                <EditItemTemplate>
                    <asp:TextBox
                        ID="txtItemQuantity"
                        runat="server"
                        placeholder="Quantity"
                        CssClass="form-control"></asp:TextBox>
                    <ajaxToolkit:FilteredTextBoxExtender ID="ftbeQuantity" runat="server"
                        TargetControlID="txtItemQuantity"
                        FilterType="Numbers"></ajaxToolkit:FilteredTextBoxExtender>
                    <%--<asp:RequiredFieldValidator
                    ID="rfvQuantity"
                    runat="server"
                    ControlToValidate="txtItemQuantity"
                    ErrorMessage="Item Quantity must be enter in numbers."
                    Display="None">
                </asp:RequiredFieldValidator>--%>
                </EditItemTemplate>
                <FooterTemplate>
                    <asp:TextBox
                        ID="txtItemQuantity"
                        runat="server"
                        placeholder="Quantity"
                        Text='<%# Eval("Item_Qty") == null ? "0" : Eval("Item_Qty") %>'
                        TabIndex="7"
                        CssClass="form-control"></asp:TextBox>
                    <ajaxToolkit:FilteredTextBoxExtender ID="ftbeQuantity" runat="server"
                        TargetControlID="txtItemQuantity"
                        FilterType="Numbers"></ajaxToolkit:FilteredTextBoxExtender>
                    <%--<asp:RequiredFieldValidator
                    ID="rfvQuantity"
                    runat="server"
                    ControlToValidate="txtItemQuantity"
                    ErrorMessage="Item Quantity must be enter in numbers."
                    Display="None">
                </asp:RequiredFieldValidator>--%>
                </FooterTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="UOM">
                <ItemTemplate>
                    <asp:Label ID="lblUOM" runat="server" Text='<%# Eval("Item_UOM") %>'></asp:Label>
                </ItemTemplate>
                <EditItemTemplate>
                    <asp:DropDownList
                        ID="ddlUOM"
                        runat="server"
                        CssClass="ah-border-less"
                        AutoPostBack="true">
                        <asp:ListItem Selected="True" Value="0">Select UOM</asp:ListItem>
                        <asp:ListItem Value="1">GM</asp:ListItem>
                        <asp:ListItem Value="2">KG</asp:ListItem>
                        <asp:ListItem Value="3">PCS</asp:ListItem>
                        <asp:ListItem Value="4">DZ</asp:ListItem>
                        <asp:ListItem Value="5">BOX</asp:ListItem>
                    </asp:DropDownList>
                </EditItemTemplate>
                <FooterTemplate>
                    <asp:DropDownList
                        ID="ddlUOM"
                        runat="server"
                        TabIndex="8"
                        CssClass="ah-border-less">
                        <asp:ListItem Selected="True" Value="0">Select UOM</asp:ListItem>
                        <asp:ListItem Value="GM">GM</asp:ListItem>
                        <asp:ListItem Value="KG">KG</asp:ListItem>
                        <asp:ListItem Value="PCS">PCS</asp:ListItem>
                        <asp:ListItem Value="DZ">DZ</asp:ListItem>
                        <asp:ListItem Value="BOX">BOX</asp:ListItem>
                    </asp:DropDownList>
                </FooterTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Total Price">
                <ItemTemplate>
                    <asp:Label ID="lblTotalPrice" Text='<%# Eval("Total_Price") %>' runat="server"></asp:Label>
                </ItemTemplate>
                <FooterTemplate>
                    <asp:Label ID="lblTotalPrice" runat="server" Text='<%# Eval("Total_Price") == null ? "0" : Eval("Total_Price") %>'></asp:Label>
                </FooterTemplate>
            </asp:TemplateField>
            <asp:TemplateField>
                <FooterTemplate>
                    <asp:LinkButton ID="itemAdd" ClientIDMode="AutoID" CommandName="Add" runat="server" TabIndex="9">Add</asp:LinkButton>
                </FooterTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView>
</ContentTemplate>

Aspx.cs代码:

protected void gvItemDetail_RowCommand(object sender, GridViewCommandEventArgs e)
{
    if (e.CommandName.Equals("Add"))
    {
        HiddenField itemID = (HiddenField)gvItemDetail.FooterRow.FindControl("hdnItemID");
        HiddenField itemPurchasePrice = (HiddenField)gvItemDetail.FooterRow.FindControl("hdnPurchase_Price");
        TextBox itemName = (TextBox)gvItemDetail.FooterRow.FindControl("txtItemName");
        TextBox itemSalesPrice = (TextBox)gvItemDetail.FooterRow.FindControl("txtSalesPrice");
        TextBox itemQTY = (TextBox)gvItemDetail.FooterRow.FindControl("txtItemQuantity");
        DropDownList itemUOM = (DropDownList)gvItemDetail.FooterRow.FindControl("ddlUOM");
        Label itemTotalPrice = (Label)gvItemDetail.FooterRow.FindControl("lblTotalPrice");

        Decimal dcmTotalPrice = (Convert.ToDecimal(itemSalesPrice.Text.Trim()) * Convert.ToDecimal(itemQTY.Text.Trim()));
        Decimal dcmPurchasePrice = (Convert.ToDecimal(itemPurchasePrice.Value.Trim()) * Convert.ToDecimal(itemQTY.Text.Trim()));

        DataTable dt = (DataTable)HttpContext.Current.Session["dtInvoiceItemDetail"];
        //dt.Rows[0].Delete();
        dt.Rows.Add(itemID.Value.Trim(),
                itemName.Text.Trim(),
                itemSalesPrice.Text.Trim(),
                itemQTY.Text.Trim(),
                itemUOM.SelectedValue.ToString().Trim(),
                dcmTotalPrice,
                dcmPurchasePrice
                );
        dt.AcceptChanges();
        gvItemDetail.DataSource = dt;
        gvItemDetail.DataBind();
        gvItemDetail.Rows[0].Visible = false;
        HttpContext.Current.Session["dtInvoiceItemDetail"] = dt;
        lblCalculateTotal.Text = (Convert.ToDecimal(dt.AsEnumerable()
        .Sum(x => Convert.ToDecimal(x["Total_Price"])))).ToString();

        commission = ((Convert.ToDecimal(lblCalculateTotal.Text.Trim()) - Convert.ToDecimal(dt.AsEnumerable()
        .Sum(x => Convert.ToDecimal(x["Purchase_Price"])))) * 10) / 100;
    }
    gvItemDetail.FooterRow.Focus();
}

我尝试过的事情:

在部分回发ASP.NET上保持面板滚动位置

关于:更新面板滚动问题

将面板滚动位置保持在在ASP.NET中回发

页面跳转到顶部

如何为动态控件事件保留浏览器滚动位置

推荐答案

我发现我的解决方案是,当我删除 gvItemDetail.FooterRow.Focus(); 代码时,我的页面将保持其滚动位置.感谢您的所有评论.

I've found my solution that when I remove gvItemDetail.FooterRow.Focus(); code my page maintain its scroll position. Thanks for all of your comments.

这篇关于在GridView中添加动态行时如何保持页面的滚动位置?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆