1


0

タイマーの動作がおかしい
aspxページの奇妙な動作に直面しています。

「MyDataList」というDataListがあります。 「Date」フィールドが「SomeDate」より小さい場合など、データの任意の値に応じて、DataListの行を条件付きで強調表示する必要があります。

UpdatePanel、ScriptManager、タイマー(すべてAJAX)を使用してMyDataListを更新しています。

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

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

問題:

ItemCreated`イベントに_empty_イベントハンドラー(EG、 MyDataList_ItemCreated`など)を追加すると、上で示したように正常に機能します。

(下に示すように) ItemCreated`イベントハンドラーで値を強調表示するコードを提供すると、タイマーは刻みを停止し、イベント Timer1_Tick`はそれ以上発生しません。

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

タイマーが更新され続けるようにこれを修正するにはどうすればよいですか?

1 Answer


0


質問は許しますが、ASP.NETページのタイマーコールバックでデータバインディング操作を実行しているのは正確に指定する必要があると思います。

私が考えることができるような状況は多くありません(OK、any)。

タイマーコールバックとは、基本的にページ処理パイプラインの外側にアクションを配置することを意味します。そのため、コードが暗黙的または明示的に依存するオブジェクトが使用できなくなる可能性があります。

データバインディングを実行しているため、タイマーイベントが発生し、既にユーザーにプッシュされているグリッドを更新しようとしている可能性があります。

タイマーを使用してイベントを発生させ、データグリッドを更新しているようです。 これに伴う問題は、サーバー側で構造を更新しているが、クライアント側の更新と同じではないことです。 クライアントは、このデータを取得するために自分自身を更新する必要があります(サーバーには、実際にクライアントに接続して更新する方法がありません)。