找回密码
 立即注册

QQ登录

只需一步,快速开始

sam
论坛元老   /  发表于:2012-11-18 15:19  /   查看:9556  /  回复:11
Hi Dof or iceman:

请问,在Asp.net后台中,如何在新增行后,自动将上下的滚动条自动滚到最下面(最下面的行)?这样,就不用,每次新增加行后,又要手动拉下滚动条到最下行。
说明:我的新增行是我自己在外面的自定义按钮中实现的。使用后台的方法AddRows.
我在Js前台找到个方法:ScrollTo.
但是我是想直接通过后台实现。

以上,改如何实现。谢谢!

11 个回复

倒序浏览
admin讲师达人认证 悬赏达人认证 活字格认证 SpreadJS 开发认证
管理员   /  发表于:2012-11-19 11:10:00
沙发
Hi sam

该功能可以在后台完成行插入之后,调用客户端的ScrollTo方法来实现

  1.         protected void Page_Load(object sender, EventArgs e)
  2.         {
  3.             if (!IsPostBack)
  4.             {
  5.                 FpSpread1.ActiveSheetView.AllowPage = false;
  6.             }
  7.         }

  8.         protected void Button1_Click(object sender, EventArgs e)
  9.         {
  10.             // 在指定位置插入新行
  11.             FpSpread1.ActiveSheetView.AddRows(FpSpread1.ActiveSheetView.RowCount-1, 1);

  12.             // 调用客户端的ScrollTo方法
  13.             StringBuilder sb = new StringBuilder();
  14.             sb.AppendLine("<script>");
  15.             sb.AppendLine("ScrollToRow();");
  16.             sb.AppendLine("</script>");
  17.             ClientScript.RegisterStartupScript(this.GetType(), "scroll", sb.ToString());
  18.         }
复制代码

  1.     <script type="text/javascript" language="javascript">
  2.         function ScrollToRow() {
  3.             if (FpSpread1.readyState == "complete") {
  4.                 FpSpread1.ScrollTo(FpSpread1.GetRowCount() - 1, 0);
  5.             } else if (FpSpread1.readyState == "loading") {
  6.             setTimeout(ScrollToRow, 500);
  7.             }
  8.         }
  9.     </script>
复制代码



7015_AddRows.zip (7.81 KB, 下载次数: 148)
回复 使用道具 举报
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2012-11-19 11:16:00
板凳
ScrollTo.gif
回复 使用道具 举报
sam
论坛元老   /  发表于:2012-11-19 20:21:00
地板
好了。谢谢!
回复 使用道具 举报
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2012-11-23 18:13:00
5#
回复 使用道具 举报
sam
论坛元老   /  发表于:2012-12-1 22:46:00
6#
Hi  dof:

现在在火狐中,以上代码不生效。有没办法,也可让在火狐中也可达到以上效果。谢谢!
function ScrollToLastRow() {
        var spread = document.getElementById(&quot;Fpspread1&quot;);
        if (spread.readyState == &quot;complete&quot;) {
            var valRow = spread.GetRowCount() - 1;
            spread.ScrollTo(valRow, 0);
            spread.SetActiveCell(valRow, 1);
            return false;
        }
        else if (spread.readyState == &quot;loading&quot;) {
            setTimeout(function () { ScrollToLastRow() }, 500);
        }
    }
回复 使用道具 举报
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2012-12-3 16:13:00
7#
回复 6楼sam的帖子

因为FireFox不支持readyState,所以,在FireFox中无法实现。
回复 使用道具 举报
sam
论坛元老   /  发表于:2012-12-3 16:50:00
8#
有沒其他的方法可以實現呢?麻煩幫忙看看。謝謝!
回复 使用道具 举报
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2012-12-27 15:23:00
9#
回复 8楼sam的帖子
  1.     <script type="text/javascript" language="javascript">

  2.         var rowindex = 0;

  3.         function ScrollToRow(e) {
  4.             if (e != "" &amp;&amp; e != undefined) {
  5.                 rowindex = e;
  6.             }

  7.             if (document.all) {
  8.                 document.onreadystatechange = function () {
  9.                     var spread = document.getElementById("FpSpread1");
  10.                     if (spread.readyState == "complete") {
  11.                         spread.ScrollTo(rowindex, 0);
  12.                     }
  13.                 }
  14.             }
  15.             else {
  16.                 document.addEventListener("DOMContentLoaded", function () {
  17.                     var spread = document.getElementById("FpSpread1");
  18.                     spread.ScrollTo(rowindex, 0);
  19.                 }, false)
  20.             }
  21.         }        
  22.     </script>
复制代码
回复 使用道具 举报
sam
论坛元老   /  发表于:2012-12-27 21:28:00
10#
Hi dof:

以上,如果放在:ScriptManager 和 UpdatePanel 就会失效。
如下:
前台:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm2.aspx.cs" Inherits="_0000_Popup.WebForm2" %>

<%@ Register Assembly="FarPoint.Web.Spread" Namespace="FarPoint.Web.Spread" TagPrefix="FarPoint" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
        <script type="text/javascript" language="javascript">

            function ScrollToRow(valgridname) {
                var rowindex = 0;
                if (document.all) {
                    document.onreadystatechange = function () {
                        var spread = document.getElementById(valgridname);
                        rowindex = spread.GetRowCount() - 1;
                        if (spread.readyState == "complete") {
                            spread.ScrollTo(rowindex, 0);
                            spread.SetActiveCell(rowindex, 1);
                        }
                    }
                }
                else {
                    document.addEventListener("DOMContentLoaded", function () {
                        var spread = document.getElementById(valgridname);
                        rowindex = spread.GetRowCount() - 1;
                        spread.ScrollTo(rowindex, 0);
                        spread.SetActiveCell(rowindex, 1);
                    }, false)
                }

            }   
            
                 
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:ScriptManager ID="ScriptManager1" runat="server">
        </asp:ScriptManager>
        <asp:UpdatePanel ID="UpdatePanel1" runat="server">
        <ContentTemplate>
   
        <FarPoint:FpSpread ID="FpSpread1" runat="server" BorderColor="Black" BorderStyle="Solid"
            BorderWidth="1px" Height="200" Width="400">
            <CommandBar BackColor="Control" ButtonFaceColor="Control" ButtonHighlightColor="ControlLightLight"
                ButtonShadowColor="ControlDark">
            </CommandBar>
            <Sheets>
                <FarPoint:SheetView SheetName="Sheet1">
                </FarPoint:SheetView>
            </Sheets>
        </FarPoint:FpSpread>
        <asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />
        </ContentTemplate>
        </asp:UpdatePanel>
    </div>
    </form>
</body>
</html>

后台:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Text;

namespace _0000_Popup
{
    public partial class WebForm2 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {

                FpSpread1.ActiveSheetView.AllowPage = false;

            }


        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            // 在指定位置插入新行

            FpSpread1.ActiveSheetView.AddRows(FpSpread1.ActiveSheetView.RowCount - 1, 1);



            // 调用客户端的ScrollTo方法

            StringBuilder sb = new StringBuilder();

            sb.AppendLine("<script>");

            sb.AppendLine("ScrollToRow('FpSpread1');");

            sb.AppendLine("</script>");

            ClientScript.RegisterStartupScript(this.GetType(), "scroll", sb.ToString());


        }
    }
}

你可以试下。
麻烦再帮忙看看,因为我界面中需要有Updatepanel.

谢谢!
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部