0

我在 gridview 中显示的结果与调试时显示的结果不同。

有一个用于过滤结果的网格视图的搜索,它似乎只在数字低于几百时才有效。

例如,搜索rank, whererank =='10'结果存储过程总计 607 和 all rank == 10。linq to sql 调试结果完全一样。

当结果绑定到 gridview 并显示时,它们似乎是正确的,直到您到达显示结果的第 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 是一个存储过程,它返回 607 条所有等级 == 10 的记录。至少这是我从你的描述中收集到的。如果是这样,那为什么要过滤 10 呢?但是,如果它返回所有记录,则可能是过滤问题。

由于它是 IEnumerable,我们可以排除 SQL 可能存在的问题。

然后为了排除故障,我首先会立即输出所有结果,最好是在 page_load 上。禁用分页或简单地使用 foreach 遍历所有记录并将它们写入响应。这样,您将确定运行时返回的内容是否是您需要的,并消除网格和回发可能出现的问题。

然后我会检查你的分页。由于您似乎依赖视图状态为您进行分页,因此我会确保检查它的大小。.NET 中 post 的默认最大请求长度设置为 4MB (maxRequestLength = 4,096),但可以想象您的 Web 服务器配置的值较小。这可能会以某种方式破坏它。虽然我认为在这种情况下你会得到一个例外。

最后,我将禁用视图状态,取而代之的是检索每个分页上的所有数据,然后简单地执行 .Skip(...).Take(...)。但是我感觉您的帖子中某处缺少信息。

于 2012-07-11T18:13:53.523 回答