如果数字很大,Linq结果绑定到gridview无法正确显示

时间:2012-07-10 21:32:49

标签: c# asp.net linq gridview

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

搜索过滤结果的网格视图,如果数字少于几百,它似乎只能工作。

示例,搜索rank,其中rank =='10'导致存储过程总计607,所有rank == 10。 linq到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();

1 个答案:

答案 0 :(得分:2)

由于所提供的信息有点不清楚,因此很难在这里给出一个好的答案。

我假设FullEmployeeRoster是存储过程,它返回607条记录,所有级别== 10.至少这是我从您的描述中收集的内容。如果是这样,那为什么要过滤10?但是,如果它返回所有记录,则可能是过滤问题。

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

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

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

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