我在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();
答案 0 :(得分:2)
由于所提供的信息有点不清楚,因此很难在这里给出一个好的答案。
我假设FullEmployeeRoster是存储过程,它返回607条记录,所有级别== 10.至少这是我从您的描述中收集的内容。如果是这样,那为什么要过滤10?但是,如果它返回所有记录,则可能是过滤问题。
由于它是IEnumerable,我们可以排除SQL的可能问题。
然后要排除故障,我会首先输出所有结果,最好是在page_load上。要么禁用分页,要么简单地使用foreach遍历所有记录并将其写入响应。这样您就可以确定运行时返回的内容是否是您所需要的,并消除了网格和回发可能出现的问题。
然后我会检查你的分页。由于看起来你依赖于一个视图状态为你做分页,我会确保检查它的大小。 .NET中post的默认最大请求长度设置为4MB(maxRequestLength = 4,096),但可以想象您的Web服务器配置的值较小。这可能会以某种方式破坏它。虽然我认为你会在这种情况下得到例外。
最后,我会禁用视图状态,而是检索每个分页上的所有数据,然后简单地执行.Skip(...)。Take(...)。但我觉得你的帖子中某处缺少信息。