0

グリッドビューに表示される結果は、デバッグ時に表示される結果とは異なります。

結果をフィルタリングするグリッドビューの検索があり、数値が数百未満の場合にのみ機能するようです。

例として、を検索しますrank。ここで、rank =='10'結果はすべてのストアドプロシージャの合計607になりますrank == 10。linqからsqlへの結果はまったく同じデバッグです。

結果がグリッドビューにバインドされて表示されると、表示された結果の10ページに到達するまでは正しいように見えますが、結果は正しくありません。つまり、rank != 10

結果は、小さい結果セットに対して正しいように見えます。何が起こっているのかわかりません。

ここにコードがあります

DataTable getEmployeeResults = employee.FullEmployeeRoster();
var results = (from row in getEmployeeResults.AsEnumerable()
        select new EmployeeRow
                {
                  EmployeeId = row.Field<int?>("EmployeeID"),
                  Rank = row.Field<string>("Rank"),
                  Name = row.Field<string>("Name"),
                  WorkEmail = row.Field<string>("Email"),
                  DutyStation = row.Field<string>("StationName"),
                  Directorate = row.Field<string>("Directorate"),
                  BranchService = row.Field<string>("Branch"),
                  Active = ConvertToBool(row.Field<int>("Active"))
                });


if (this.ddRank.SelectedValue != "")
{
    results = results.Where(x => x.Rank == this.ddRank.SelectedItem.Text);
}

if (this.chkInactive.Checked)
{
    results = results.Where(x => x.Active == false);
}
else
{
    results = results.Where(x => x.Active == true);
}

    this.gridEmployees.DataSource = results.ToList();
    this.gridEmployees.DataBind();
4

1 に答える 1

2

提供された情報が少し不明確であるため、ここで適切な回答をすることは困難です。

FullEmployeeRoster は、すべてのランク == 10 の 607 レコードを返すストアド プロシージャであると想定しています。少なくとも、それはあなたの説明から収集したものです。もしそうなら、なぜ10でフィルタリングするのですか? ただし、すべてのレコードが返される場合は、フィルタリングの問題である可能性があります。

IEnumerable であるため、SQL で発生する可能性のある問題を除外できます。

次に、トラブルシューティングを行うために、できれば page_load で、最初にすべての結果を一度に出力します。ページネーションを無効にするか、foreach を使用してすべてのレコードを繰り返し処理し、それらを応答に書き込みます。そうすれば、実行時に返されるものが必要なものであるかどうかを確実に知ることができ、グリッドとポストバックで発生する可能性のある問題を排除できます。

次に、ページネーションを確認します。ビューステートに依存してページネーションを行っているように見えるので、サイズを確認します。.NET での投稿のデフォルトの最大リクエスト長は 4MB (maxRequestLength = 4,096) に設定されていますが、Web サーバーがそれより小さい値で構成されている可能性があります。それはどういうわけかそれを壊す可能性があります。その場合、例外が発生すると思いますが。

最後に、ビュー ステートを無効にして、代わりに各ページネーションのすべてのデータを取得し、単純に .Skip(…).Take(…) を実行します。しかし、あなたの投稿のどこかに情報が欠けているような気がします。

于 2012-07-11T18:13:53.523 に答える