0

データグリッドを持つ ASP.NET Web ページがあります。データグリッドは、ボタン クリック イベントで読み込まれます。データグリッドをロードする前にいくつかのメソッドが実行され、データを取得するのに時間がかかります。グリッドがロードされる前に、進行状況バーを表示してユーザーに待機中のインジケーターを表示したいと考えています。それを行う最善の方法は何ですか?

protected void btnStart_Click(object sender, ImageClickEventArgs e) {

    _bw = new BackgroundWorker();
    _bw.DoWork += bw_DoWork;
    _bw.RunWorkerCompleted += bw_RunWorkerCompleted;
    _bw.RunWorkerAsync();
    waiting.Style["display"] = "inline";
    divDataGrid.Style["display"] = "none";
}

private void bw_DoWork(object sender, DoWorkEventArgs e)
    {
        BackgroundWorker worker = sender as BackgroundWorker;
        int n = Convert.ToInt32(e.Argument);
        e.Result = PerformBinding(n, worker, e);
    }

private bool PerformBinding(int n, BackgroundWorker worker, DoWorkEventArgs e)
    {
        Service.Start();
        BindDataGrid();
        return true;
    }


private void BindDataGrid()
{
  //take some time to get data
}

private void bw_RunWorkerCompleted(object sender,
                                       RunWorkerCompletedEventArgs e)
    {
        waiting.Style["display"] = "none";
        divDataGrid.Style["display"] = "inline";
    }

ここで、「waiting」は進行状況バーを待機するための div タグ ID であり、「divDataGrid」はそのグリッドを含む div タグです。

4

4 に答える 4

0

読み込みに時間がかかるコードを更新パネルに配置して、ページを非同期に読み込むことができるようにします。最初に静的なものを読み込み、次に動的部分が生成されると、それらも読み込まれます。ロードされるのを待っている間、ある種の回転するアイコンを配置して、更新パネルである種の準備完了ハンドラーを使用して、ロードされたときにオフにすることもできます。

于 2013-04-02T14:44:30.373 に答える
0

皆さんありがとう。簡単な解決策を見つけました。

<asp:ImageButton ID="btnStart" runat="server" src="images/Play.png" OnClick="btnStart_Click" OnClientClick="document.getElementById('waiting').style.display='block';" />

<div id="waiting" style="position: left: 0px; top: 0px; background-color: white;
                            height: 100%; width: 100%; display:none" align="center" runat="server" >
                            <img src="images/progress.gif" height="60px" />
                        </div>

protected void btnStart_Click(object sender, ImageClickEventArgs e)
    {
        Service.Start();
        BindDataGrid();
        waiting.Style.Add("display", "none;");
    }
于 2013-04-02T15:43:56.637 に答える
0

提案されているように、UpdatePanelコントロールを使用できます。その中に、回転するアイコンUpdateProgressを設定して追加する必要があります。

<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
            <!-- Your controls here -->
    <updateprogress>
        <progresstemplate>
                <img src="images/loading.gif">
            </progresstemplate>
    </updateprogress>
</ContentTemplate>
<Triggers>
    <asp:AsyncPostBackTrigger />
</Triggers>

于 2013-04-02T14:56:56.687 に答える