0

私は調査アプリケーションを構築しています。私は、管理者、クライアント、サーベイヤー、およびその他のマネージャーに対してスケジュールされたアンケートのビューを提供するページを持っています。また、そのステータスなども表示されます。gridview Action 列に 3 つの画像ボタンがあります。私は実行時にいくつかのスタイルと Javascript 関数をそれらにバインドしています。これはイベント コードです。

    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {

            int clientID = int.Parse(((System.Data.DataRowView)(e.Row.DataItem)).Row.ItemArray[5].ToString());
            int surveyID = int.Parse(((System.Data.DataRowView)(e.Row.DataItem)).Row.ItemArray[6].ToString());
            int scheduleID = int.Parse(((System.Data.DataRowView)(e.Row.DataItem)).Row.ItemArray[0].ToString());
            //string latitude = ((System.Data.DataRowView)(e.Row.DataItem)).Row.ItemArray[12].ToString();
            //string longitude = ((System.Data.DataRowView)(e.Row.DataItem)).Row.ItemArray[13].ToString();
            //string address = ((System.Data.DataRowView)(e.Row.DataItem)).Row.ItemArray[14].ToString();
            string status = ((System.Data.DataRowView)(e.Row.DataItem)).Row.ItemArray[1].ToString();

            //hdnMapCoordinates.Value += latitude + "|" + longitude + "|" + address + "|" + status + "~";


            List<int> cellsList = new List<int>(new int[] { 0, 1, 2, 3, 4, 5, 6, 7 });
            for (int i = 0; i < cellsList.Count; i++)
            {
                e.Row.Cells[cellsList[i]].Style.Add("cursor", "pointer");
                e.Row.Cells[cellsList[i]].CssClass = "inline";
                e.Row.Cells[cellsList[i]].Attributes.Add("href", "#inline_content3");
                e.Row.Cells[cellsList[i]].Attributes.Add("onclick", string.Format("OpenForm({0},{1},{2},'{3}'); return false;", surveyID, clientID, scheduleID, status));
            }


            System.Web.UI.WebControls.Image imgStatus = (System.Web.UI.WebControls.Image)e.Row.FindControl("imgStatus");
            ((ImageButton)e.Row.FindControl("imgOpenSurvey")).OnClientClick = string.Format("OpenSurvey({0} , {1} , {2});return false;", surveyID, clientID, scheduleID);
            ((ImageButton)e.Row.FindControl("imgApprove")).OnClientClick = string.Format("ApproveSurvey({0});return false;", scheduleID);

            if (userRole.Contains("Supervisor"))
            {
                if (status == "submitted")
                {
                    ((ImageButton)e.Row.FindControl("imgApprove")).Visible = true;
                }
            }

            ((ImageButton)e.Row.FindControl("imgOpenSurvey")).Style.Add("display", "none");

            if (status == "new" || status == "NEW" || status == "scheduled")
            {
                imgStatus.ImageUrl = "~\\Images\\new.png";
                imgStatus.ToolTip = "new";
            }
            else if (status == "submitted")
            {
                imgStatus.ImageUrl = "~\\Images\\approve-required.png";
                imgStatus.ToolTip = "submitted";
            }
            else if (status == "approved")
            {
                ((ImageButton)e.Row.FindControl("imgOpenSurvey")).Style.Add("display", "");
                ((ImageButton)e.Row.FindControl("imgPrintSurvey")).Style.Add("display", "");

                imgStatus.ImageUrl = "~\\Images\\checkmark.png";
                imgStatus.ToolTip = "approved";
            }
            else if (status == "seen")
            {
                ((ImageButton)e.Row.FindControl("imgOpenSurvey")).Style.Add("display", "");
                ((ImageButton)e.Row.FindControl("imgPrintSurvey")).Style.Add("display", "");

                imgStatus.ImageUrl = "~\\Images\\checkmark.png";
                imgStatus.ToolTip = "approved";
                //e.Row.BackColor = Color.FromArgb(153, 255, 153);
            }
            else if (status == "on-hold")
            {
                imgStatus.ImageUrl = "~\\Images\\close-btn.png";
                imgStatus.ToolTip = "On-Hold";
            }
            else if(status == "canceled"){
                imgStatus.ImageUrl = "~\\Images\\cancel.png";
                imgStatus.ToolTip = "Canceled";
            }
        }
    }

問題は、このページに対して ANTS Performance Profiler 7.1 を実行したときに、このイベントが 297 回ヒットしたことです。ページの読み込みに最も時間がかかっているもの。これに代わるもの、またはページのパフォーマンスを改善するためのヒントが必要です。ページングなどはすでに試されています。ありがとうございました。

4

1 に答える 1

0

カスタムページングを試しましたか? デフォルトの gridview ページングは​​クライアント側のみです。

グリッドビューにあるレコードの数によって異なります。データソースを介してすべてのレコードを取得している場合、追加のフォーマットと変換により、アプリケーションの速度が確実に低下します。このようなシナリオでは、カスタム データベース ページングが常に優先されるため、データベースからページごとに 10 レコードを取得し、それらにのみ書式を適用します。

SELECT ...
FROM
   (SELECT ... 
         ROW_NUMBER() OVER(ORDER BY ColumnName) as RowNum
    FROM Employees e
   ) as DerivedTableName
WHERE RowNum BETWEEN @startRowIndex AND (@startRowIndex + @maximumRows) - 1

ここでは、ページの startRowIndex (gridview が自動的に渡します)、ページごとにフェッチする最大行 (gridview もこれを行います) を渡します。

セットアップには時間がかかりますが、結果は価値があります。この記事を確認してくださいASP.NET 4 のカスタム ページングについては、rolla から

于 2014-08-29T11:32:15.357 に答える