如何以时间间隔显示记录

时间:2014-12-01 06:35:47

标签: asp.net xml

我有一个网站,即我正在使用aspx页面。我将值存储到xml文件中。 我需要在asp标签上以指定的时间间隔(比如说1分钟)显示存储在xml中的值。但并非所有记录都显示在实例上。首先是xml的第一个记录和下一个记录的时间间隔之后的等等。在最后一次记录之后,需要显示第一条记录。

我谷歌搜索了很多,但找不到具体的解决方案。 请帮助我成功解决方案。感谢...

这是我的代码,但它没有给出预期的结果。请帮我编辑一下。

HTML代码

<div>
<table width="100%">
<tr><td>
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
</td></tr>
<tr><td>
<asp:Timer ID="Timer1" runat="server" ontick="Timer1_Tick">
</asp:Timer>
</td></tr>
<tr><td>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:Label ID="Label1" runat="server" Text="" ></asp:Label>
</ContentTemplate> 
<Triggers>
<asp:AsyncPostBackTrigger ControlID="timer1" EventName ="tick" />
</Triggers>
</asp:UpdatePanel>    
</td></tr>
<tr><td></td></tr>
</table>
</div>

ASPX编码

public partial class UpdateNews : System.Web.UI.Page
{
DataRow dr;
int i = 1;
protected void Page_Load(object sender, EventArgs e)
{
if (!ScriptManager1.IsInAsyncPostBack)
Session["timeout"] = DateTime.Now.AddMinutes(120).ToString();
//GetNewValue();
}
protected void Timer1_Tick(object sender, EventArgs e)
{
if (0 > DateTime.Compare(DateTime.Now,
DateTime.Parse(Session["timeout"].ToString())))
{
i++;
GetNewValue();
}
}
public void GetNewValue()
{
DataSet ds = new DataSet();
ds.ReadXml(Server.MapPath("News.xml"));
DataTable dt = ds.Tables[0];
if (i <= dt.Rows.Count)
{
dr = dt.Rows[i - 1];
Label1.Text = dr["Title"].ToString();
}
else
{
 if(i > dt.Rows.Count )
 i = 1;
}
}
}

3 个答案:

答案 0 :(得分:0)

您可以在asp.net网络表单中使用更新面板的时间。 以下是代码:

<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional"> 
<Triggers>
    <asp:AsyncPostBackTrigger  ControlID="Timer1" EventName="Tick" />
</Triggers>
<ContentTemplate> 
    <!-- your content here, no timer -->
</ContentTemplate> 

 

您想要做的事情可以放在timer1_tick

答案 1 :(得分:0)

我现在得到了答案,我的代码运行正常。 但现在当我把我的页面放在内容页面时,我得到一个新的错误:-( 请帮助我,由于我的截止日期,我最早需要清除此错误。

它说:不能隐式转换类型&#39;字符串&#39; to&#39; system.web.ui.webcontrols.label&#39;在第1行         第1行是

<%@ Page Language="C#" MasterPageFile="~/Main.master" AutoEventWireup="true"               CodeFile="Home.aspx.cs" Inherits="Home" Title="Untitled Page" %>

我的工作代码在这里:

HTML代码

<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>  
<asp:Timer ID="Timer1" runat="server" ontick="Timer1_Tick">
</asp:Timer>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:Label ID="Title" runat="server" Text=""></asp:Label>
<asp:Label ID="News" runat="server" Text=""></asp:Label>
<asp:Label ID="Counter" runat="server" Text="" ></asp:Label>
</ContentTemplate>
<Triggers><asp:AsyncPostBackTrigger ControlID="timer1" EventName ="tick" /></Triggers>
</asp:UpdatePanel>

ASPX代码:

public partial class Home : System.Web.UI.Page
{
DataRow dr;
int i = 1;
protected void Page_Load(object sender, EventArgs e)
{
if (!ScriptManager1.IsInAsyncPostBack)
Session["timeout"] = DateTime.Now.AddMinutes(100).ToString();
if (!string.IsNullOrEmpty(Counter.Text))
{
i = int.Parse(Counter.Text);
i++;
}
GetNewValue();
}

public void GetNewValue()
{
DataSet ds = new DataSet();
ds.ReadXml(Server.MapPath("News.xml"));
DataTable dt = ds.Tables[0];
if (i <= dt.Rows.Count)
{
dr = dt.Rows[i - 1];
Title.Text = dr["Title"].ToString();
News.Text = dr["Description"].ToString();
Counter.Text = i.ToString();
}
else
{
if (i > dt.Rows.Count)
i = 1;
Counter.Text = i.ToString();
}
}

protected void Timer1_Tick(object sender, EventArgs e)
{
if (0 > DateTime.Compare(DateTime.Now,
DateTime.Parse(Session["timeout"].ToString())))
{
GetNewValue();
}
}
}

答案 2 :(得分:0)

我的代码是正确的 只是错误是我不应该在更新面板中重命名标签的ID字段。 我不知道为什么会这样。 但当我将我的标题,计数器,新闻标签重命名为label1 label2 .... 它运作正常,并给了我所需的结果。

谢谢大家回复并试图帮助我。