2

私はMVC3の最新のRC2バージョンを使用しています。

私はウェブグリッドを持っていますが、特にページングと並べ替えに関して、ひどい問題を引き起こしています。ページングは​​より効率的になり、テーブル全体をプルバックするのではなく、表示しているページに必要な行のみをプルバックする必要があると言われました。これは私が期待したように機能していません(非常に遅い)ので、最も単純な形式にしてプロファイラーを起動しました。

私はこのActionResultを持っています:

    public ActionResult TestGrid()
    {
        return View(ents.Decisions);
    }

そしてこの見方:

    @model IEnumerable<DecisionPanel.Web.Models.DataModel.Decision>

@{
    ViewBag.Title = "TestGrid";
    var usersGrid = new WebGrid(source: Model, rowsPerPage: 50);
}

<h2>TestGrid</h2>

@usersGrid.GetHtml(
        tableStyle: "grid",
        headerStyle: "header",
        alternatingRowStyle: "alt",
        rowStyle: "row",
                columns: usersGrid.Columns(
                        usersGrid.Column("UserID", "User Id"),
                        usersGrid.Column("HasAgreed", "Has Agreed?"),
                        usersGrid.Column("Comment"),
                        usersGrid.Column("DateResponded", "Date of Response", format: @<text>@item.DateResponded.ToString("dd MMM yyy (HH:mm.ss)")</text>)
        )
    )

ページをヒットすると、これがプロファイラーで実行されます-11回

SELECT 
[Extent1].[ID] AS [ID], 
[Extent1].[UserID] AS [UserID], 
[Extent1].[HasAgreed] AS [HasAgreed], 
[Extent1].[Comment] AS [Comment], 
[Extent1].[DateResponded] AS [DateResponded]
FROM [dbo].[DecisionResults] AS [Extent1]

他にも問題がありますが、これが機能しない場合は、Webグリッドを放棄することを検討しています。

1週間も経たないうちにリリースされたのはまだ早いことですが、他の誰かがページングを使用して喜びを感じたことはありますか?

4

3 に答える 3

1

この時点で、データベース側のページングをサポートするIQueryableデータをスマートに処理しないMVC3RC2での出荷としてWebGridに問題があることを確認できます。RTMでこれを解決する方法を検討します。今のところ、手動​​でページングを行う必要があります。申し訳ありません。

于 2010-12-14T23:08:29.070 に答える
0

次のようなポケットベルを指定する必要はありませんか

@usersGrid.Pager(WebGridPagerModes.NextPrevious)
于 2010-12-14T20:07:40.260 に答える
0

ちょっと、IQueryablesがまだサポートされていないことをめちゃくちゃにしました。PagedListクラスを使用して回避しました

public class PagedList<T> : List<T>
{
    int _pageNr;
    int _pageSize;
    string _orderByCol;
    bool _asc;
    IQueryable<T> _query;

    public PagedList(int pageNumber, int pageSize, string orderBy, string direction, IQueryable<T> list)
    {
        var query = list;
        _query = list;
        if (!string.IsNullOrEmpty(orderBy))
        {
            if (!string.IsNullOrEmpty(direction))
            {
                orderBy = orderBy + " " + direction;
            }

            query = query.OrderBy(orderBy);
        }
        query = query.Skip(pageNumber * pageSize).Take(pageSize);
        this.AddRange(query.ToList());
    }

    public int Count 
    {
        get {
            return _query.Count();
        }
    }
}

コントローラーコード:

    public ActionResult Index(int page = 1, int pageSize = 2, string sort = null, string sortDir = "ASC")
    {
        return View(new PagedList<Something>(page-1, pageSize, sort, sortDir, Client.RetrieveAll<Something>()));
    }

私の見解では:

<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server">
  <div>
    <%

        var grid = new WebGrid(rowsPerPage: 2);
       grid.Bind(
           Model,
           autoSortAndPage: false,
           rowCount: Model.Count
           );
       %>
    <%:
        grid.GetHtml()
    %>
  </div>
</asp:Content>
于 2013-02-14T06:38:36.353 に答える