Prvním předpokladem je, že vám v okamžik, který označujete jako "cca 1x za minutu" dojde k AJAX postbacku, který bude obnovovat daný UpdatePanel. To musíte inicializovat z klienta tj. z JavaScriptu, pravděpodobně nějakým timerem. Akci timeru můžete realizovat například programovým vyvolání kliknutí na skryté tlačítko
function () { document.getElementById('<%: this.RefreshPanelButton.ID %>').click(); })
<asp:LinkButton ID="RefreshPanelButton" runat="server" ClientIDMode="Static" CausesValidation="false" style="display:none;" />
Toto tlačítko bude buď uvnitř UpdatePanelu, nebo mimo, ale zaregistrované pomoci RegisterAsyncPostBackControl:
ScriptManager.GetCurrent(this.Page).RegisterAsyncPostBackControl(this.RefreshPanelButton);
Co se týče generování vs. manipulace s existujícími prvky: Pokud pro danou část (UpdatePanel) stránky nebudete mít zapnutý view state, musíte tlačítka podle dat z db generovat pokaždé (tj. i pří obnovování update panelu pomoci Async postbacku). Tím je vytvoříte rovnou obnovené tj. víc nepotřebujete řešit. Takto to zřejmě již děláte, soudě z toho, že ve vašem kódu generujete tlačítka už ve fázi OnInit (kde viewstate ještě obnovený není). Druhou variantou je nechat prvky obnovit z view state a při postbacku s nimi manipulovat pomoci
var button = (Button)FindControl(string.Format("btnNew{0}", ID);
Preferujte ale první variantu. A v poslední řadě, co se týče samotného generování prvků, mnohem čistší by bylo použít prvek Repeater a model binding, náznak příkladu:
<asp:Repeater runat="server" ItemType="Data.Models.Button" SelectMethod="GetButtons">
<ItemTemplate>
<asp:Button runat="server" Text='<%# Item.Nadpis %>' CommandName="New" CommandArgument='<%# Item.ID %>' OnClick="MyBtnHandler" />
</ItemTemplate>
</asp:Repeater>
|