C# 计时器的行为很奇怪!

C# 计时器的行为很奇怪!,c#,asp.net,events,timer,C#,Asp.net,Events,Timer,对于.aspx页面,我面临一种奇怪的行为 我有一个名为MyDataList的数据列表。我需要根据数据中的任意值有条件地突出显示数据列表的行,例如Date字段小于SomeDate 我使用UpdatePanel、ScriptManager和计时器(都是AJAX)来刷新MyDataList protected void Timer1_Tick(object sender, EventArgs e) { MyDataList.DataBind(); } prot

对于.aspx页面,我面临一种奇怪的行为

我有一个名为
MyDataList
的数据列表。我需要根据数据中的任意值有条件地突出显示数据列表的行,例如
Date
字段小于
SomeDate

我使用UpdatePanel、ScriptManager和计时器(都是AJAX)来刷新MyDataList

protected void Timer1_Tick(object sender, EventArgs e)
{                
    MyDataList.DataBind();
}

protected void MyDataList_ItemCreated(object sender, DataListItemEventArgs e)
{
}
问题:

如果我为
itemscreated
事件(例如,
MyDataList\u itemscreated
)添加一个空的事件处理程序,它可以正常工作(如上所示)

如果我提供代码来突出显示
itemscreated
事件处理程序中的值(如下所示),计时器将停止滴答声,事件
Timer1\u滴答声
将不再触发

protected void DataListBgArticles_ItemCreated(object sender, 
    DataListItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item || 
        e.Item.ItemType == ListItemType.AlternatingItem)
    {
        Product product = (Product)e.Item.DataItem;
        if (product.SaleDate > DateTime.Now.AddDays(-2))
        {
            e.Item.BackColor = Color.Pink;
        }
    }
}

如何修复此问题以使计时器继续更新?

请原谅这个问题,但我认为您应该确切地指定在ASP.NET页面的计时器回调中执行数据绑定操作的原因

我想不出有多少(好的,任何)情况需要这样的事情

计时器回调基本上意味着将操作放在页面处理管道之外,因此,代码隐式或显式依赖的任何对象都可能不再可用

因为您正在执行数据绑定,所以完全有可能您的计时器事件正在触发并尝试更新已经推送给用户的网格


您似乎正在使用计时器触发事件以更新数据网格。问题是,您正在服务器端更新结构,但这并不等同于客户端的更新。客户端需要刷新自身以获取此数据(服务器无法实际连接到客户端并刷新)。

在第二种情况下,计时器事件根本不会触发,因为我已将断点放在计时器1_Tick内,但未看到任何操作。@Asad Butt-请参阅我答案的最后一句(我已对其进行了修改)。看来您对如何对客户端执行更新的想法是错误的。