c# – 使用计时器滚动备份

c# – 使用计时器滚动备份,第1张

概述我创建了一个聊天应用程序当我向文本框添加内容并单击输入文本时添加到数据库并滚动条上升.我使用 javascript向下滚动点击哪个工作正常但由于计时器,滚动条移动到顶部很快被拖下来.我的代码如下 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="Default2" %><!DOC 我创建了一个聊天应用程序当我向文本框添加内容并单击输入文本时添加到数据库并滚动条上升.我使用 javascript向下滚动点击哪个工作正常但由于计时器,滚动条移动到顶部很快被拖下来.我的代码如下

<%@ Page Language="C#" autoEventWireup="true" Codefile="Default2.aspx.cs" inherits="Default2" %><!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><style type="text/CSS">#kdiv1{    position:relative;    left:300px;    top:20px;    height:400px;    wIDth:400px;    overflow:auto;}#kdiv2{    position:relative;    top:100px;    left:300px;}</style>    <script type="text/JavaScript">    function scrooldown(div) {        var scrolldiv = document.getElementByID(div);        scrolldiv.scrolltop = scrolldiv.scrollHeight;        scrolldiv = null;    }    </script></head><body>    <form ID="form1" runat="server" defaultfocus="text">    <div>        <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePartialRendering="true">        </asp:ScriptManager>        <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="true" RenderMode="Block">        <Triggers>        <asp:AsyncPostBackTrigger ControlID="button1" Eventname="Click" />        </Triggers>        <ContentTemplate>        <div ID="kdiv1">           <asp:Repeater ID="Repeater1" runat="server">            <ItemTemplate>            <span>             <%# DataBinder.Eval(Container.DataItem,"Message") %> <br />            </span>            </ItemTemplate>            </asp:Repeater>        </div>            <div ID="kdiv2">            <asp:TextBox ID="text" runat="server"/>            <asp:button ID="button1" runat="server" onclick="button1_Click" OnClIEntClick="scrooldown('kdiv1')" />            </div>        </ContentTemplate>        </asp:UpdatePanel>        </div>    </form></body></HTML>

C#代码

protected voID button1_Click(object sender,EventArgs e)    {        string MyConString = "DRIVER={MysqL ODBC 3.51 Driver};" + "SERVER=localhost;" + "DATABASE=chatserver;" + "UID=root;" + "PASSWORD=********;" + "OPTION=3";        OdbcConnection MyConnection = new OdbcConnection(MyConString);        try        {            OdbcCommand cmd = new OdbcCommand("INSERT INTO shoutBox(name,message)VALUES(?,?)",MyConnection);            cmd.Parameters.Add("@email",OdbcType.VarChar,255).Value = "something";            cmd.Parameters.Add("@email",OdbcType.Text).Value = text.Text;            MyConnection.open();            cmd.ExecuteNonquery();            MyConnection.Close();        }        catch        {        }        try        {            MyConnection.open();            OdbcCommand cmd = new OdbcCommand("Select message from shoutBox",MyConnection);            OdbcdataReader dr = cmd.ExecuteReader();            ArrayList values = new ArrayList();            while (dr.Read())            {                string ep = dr[0].ToString();                values.Add(new positionData(ep));            }            Repeater1.DataSource = values;            Repeater1.DataBind();            text.Text = "";            UpdatePanel1.Update();        }        catch        {        }    }}
解决方法 如果您在UpdatePanel周围而不是在内部移动div kdiv1,您将获得更好的结果:

<div ID="kdiv1">    <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="true" RenderMode="Block">        ...    </asp:UpdatePanel></div>

当前情况的问题是div kdiv1本身将在每次部分回发后被替换,并且其所有状态(如滚动位置)将丢失.

但是,即使在此更改之后,您仍然会遇到在部分回发之后添加的行不在可见区域内的问题,因为这些新行将在最后一次调用scrollldown之后添加(‘kdiv1 “).

要解决此问题,您可以在每次发生部分回发时注册要调用的函数.您可以通过将以下JavaScript添加到页面标题来执行此 *** 作:

<script language="JavaScript">    window.onload = function()    {        Sys.WebForms.PageRequestManager.getInstance().add_endRequest(function(sender,args) {            scrolldown('kdiv1');        });    };</script>

注意:在我的例子中,我写了“scrolldown”而不是“scrooldown”,因为我认为这是一个错字.

总结

以上是内存溢出为你收集整理的c# – 使用计时器滚动备份全部内容,希望文章能够帮你解决c# – 使用计时器滚动备份所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/langs/1228356.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-05
下一篇2022-06-05

发表评论

登录后才能评论

评论列表(0条)

    保存