2

私がやりたいこと:

ユーザーが行を選択し、選択した行内のセルのテキストを編集するページの複数のテキストボックスに表示できるグリッドビューを実装したいと思います。また、選択した行のテキストに応じて画像を更新したいと思います。

私は今それをどのようにやっていますか:

現在、ここにあるカスタムのクリック可能なグリッドビューコントロールを使用しています。本質的に、カスタムコントロールは、行の任意の場所をクリックするとポストバックを引き起こし、イベント処理関数をアタッチできる「OnRowClicked」イベントを提供します。この関数内で、rowindexをビューステートに保存してから、次のようなコードを使用します。

protected void GridViewClicked(object sender, GridViewRowClickedEventArgs e){
    TextBox1.Text = System.Net.WebUtility.HtmlDecode(e.Row.Cells[0].Text);
}

テキストボックスにテキストを入力し、次のようにコード化するには:

string filepath = "~/Bitmaps/" + TextBox1.Text + ".bmp";
    if (File.Exists(Server.MapPath(filepath)))
    {
        bitmap.ImageUrl = filepath;
    }
    else
    {
        bitmap.ImageUrl = "~/Bitmaps/NoImage.bmp";
    }

クリックした行に基づいて、私のWebページの画像(最大サイズ500kb)を更新します。

だから問題は何ですか?

まあ、すべてが正常に機能しています。ただし、問題は、マウスクリックが発生してからフィールド/画像が更新されるまで(〜0.5秒)、各行のクリックに顕著な遅延が発生することです。これは非常に煩わしいことです。ただし、パフォーマンスを向上させるために何ができるか、またはコードやホスティングサービスに問題がある場合でもわかりません。したがって、私が求めているのは、発生した遅延が修正可能なものであるかどうか、またはそれが私が対処しなければならないものであるかどうかです。それとも、このソリューションを本当に非効率的な方法で実装したのでしょうか。どんな入力でも大歓迎です。

4

2 に答える 2

1

このグリッドはAjaxコントロールですか?そうでない場合、遅延はクリックごとにポストバックしているだけの可能性があります。ポストバックごとに、グリッドはすべてのHTMLを再生成して送り返す必要があります。その後、ブラウザーはそれをレンダリングする必要があります。それはたくさんの活動です!

一部のコントロールのビューステートをオフにするなど、送信する必要のあるデータの量を減らす方法を検討できます。または、Ajaxソリューションを見ることができます。サーバー側で行う必要があるのは、イメージの存在を確認することだけです。それ以外はすべてJavascriptで実行できます。ファイルの存在を確認するためのAjax呼び出しは、パフォーマンスの点でそれほどコストがかからず、書き込みも比較的簡単です。

経験則(高度なコーダーであり、これをすでに知っている場合はお詫びします):応答性が高いほど、必要なサーバーへのポストバックと呼び出しが少なくなり、送信するデータが少なくなります。行ったり来たり。

于 2012-11-30T22:50:58.607 に答える
0

クリックされたgridview行は適切に機能しており、適切な関数を呼び出していると思います。時間がかかっているのはFile.IsFileExists関数だと思います。すべてを投稿する必要があります。ファイルチェック機能だと思います。たぶん、ファイル名をキャッシュするか、データベースに保存します。たぶん、データベースでインデックスを作成します。ファイルチェックはすべてのファイルをループしていると思います。つまり、Gridviewの行クリックは、コードがなくても高速です。

于 2012-11-30T17:41:10.687 に答える