绑定到gridview的Linq结果如果数目很高,则不能正确显示

问题描述:

我在GridView中看到的显示结果不同于我在调试时出现的结果。绑定到gridview的Linq结果如果数目很高,则不能正确显示

Theres搜索一个gridview过滤结果,它似乎只有在数字少于几百时才起作用。

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

上面的代码在每次回发时都从page_load调用? – 2012-07-10 21:38:54

+0

不,代码在点击按钮上调用 – Avien 2012-07-10 21:41:55

+0

@sneakthief:当它出现问题与ASP.NET相关时,为什么将它标记为winforms和datagridview? – Ruslan 2012-07-10 21:51:37

这是很难在这里给一个很好的答案所提供的信息是有点不清楚。

我假设FullEmployeeRoster是一个存储过程,它返回607条记录,所有的rank == 10。至少这是我从你的描述中收集到的。如果是这样,那么为什么过滤10?但是,如果它返回全部记录,那么它可能是过滤问题。

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

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

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

最后,我将禁用视图状态,而是检索每个分页的所有数据,并简单地执行.Skip(...).Take(...)。但我有一种感觉,在你的文章中某处缺少信息。

+0

你是正确的,有一些隐藏的东西。我现在觉得自己像个白痴,那是分页。我的变量名拼写错误:/我在代码中上下颠倒,完全忽略了一个微小的细节...... – Avien 2012-07-12 15:17:08