2014-12-01 2 views
1

У меня есть веб-сайт, то есть я работаю над страницами aspx. Я сохраняю значение в файле xml. Мне нужно отобразить значение, хранящееся в xml, в указанный промежуток времени (скажем, 1 минуту) на метке asp. Но не все записи должны отображаться в экземпляре. На первом экземпляре первая запись xml и после временной интервала следующая запись и так далее. После последней записи снова нужно записать первую запись.Как отображать записи с интервалом времени

Я много раз искал Google, но не нашел конкретного решения. Пожалуйста, помогите мне с успешным решением. Спасибо ...

Это мой код, но он не дает ожидаемых результатов. Пожалуйста, помогите мне в редактировании этого.

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; 
} 
} 
} 
+0

Вы можете запросить цикл на узлах, что хотите, и повторить их с помощью таймера или задачи.Delay (1000). – KiShOrE

+0

Я использовал цикл, но не полезен. В последнем цикле в XML-файле устанавливается метка. Я хочу каждое значение для определенного времени. Также у меня есть intializes counter to 1, но когда Time interval завершает общую страницу, загружает n вместо того, чтобы принимать следующий счетчик значений снова от 1 :-( – user4310556

ответ

0

Я получил ответ теперь мой код работает правильно. Но теперь, когда я положил мою страницу в Материалах я получаю новую ошибку :-( Пожалуйста, помогите мне, мне нужно, чтобы очистить эту ошибку при первом из-за мой срок

Он сказал:. Не может неявно преобразовать типа «строка 'до 'system.web.ui.webcontrols.label' в строке 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(); 
} 
} 
} 
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

+0

Я сделал это, но в кодировке я получаю проблему при подсчете записей, когда заканчивается интервал времени. – user4310556

+0

какая проблема вы получаете. Чтение вашего senerio вам нужно поместить последний индекс элемента, который вы получили из базы данных, в viewstate, и когда вы пытаетесь получить новый элемент из события элемента tick, вы можете получить это значение и получить следующее значение индекса этого сохраненного значения и переписать в viewstate , –

0

Мой код был правильно Просто ошибка, я не должен переименовать ID поля Labels в панели обновления. Я не знаю, почему это произошло. Но когда я переименовал свой лейбл Title, counter, News в label1 label2 .... Он работал правильно и дал мне мой необходимый результат.

Спасибо, что ответили и пытались мне помочь.

Смежные вопросы