三层 + 数据源分页 ,GridView 切换到其他页面时出问题了

cadust 2009-06-25 11:45:30
一个小程序:
  利用三层架构实现,分页功能都是在数据访问层中调用存储过程实现的。

页面功能:
  页面中主要包含一个 DropDownList 、一个 ObjectDataSource 和一个 GridView 。
  当页面第一次加载,显示所有的员工信息;当在 DropDownList 中选择具体部门时,通过 SelectMethod 和 SelectCountMethod 等属性修改 ObjectDataSource 数据源;当选择所有部门时,将以上属性修改回来。

通过以上操作,已经实现第一页数据的正常显示,问题就是:当选择具体部门时,在 GridView 中切换至第二页, ObjectDataSource 的 SelectMethod 属性自动还原到初始化状态了,报错!

====================================

现在已经找到一个临时解决办法,就是把 筛选按钮 的事件处理程序剪切到 Page_load 时间里;
在此希望能了解一下出问题的原因以及更好的解决方案,望不吝赐教!
...全文
144 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
wuyq11 2009-06-25
  • 打赏
  • 举报
回复
绑定数据是把部门传递到查询语句。

if(!PostBack)
{
BindData();
}
在DropDownList 事件里调用BindData();
用三层了就不要用ObjectDataSource ,通过数据库操作类实现
jueyingfd 2009-06-25
  • 打赏
  • 举报
回复
楼上正确,你为什么不用ASPNetPaper分页控件呢,这样简单很多,如有兴趣,可以加我QQ:360518412
guilipan 2009-06-25
  • 打赏
  • 举报
回复
触发分页事件的时候要指定当前的pageindex
cadust 2009-06-25
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 yfqvip 的回复:]
你选择具体部门的时候页面刷新了,所以导致又还原到第一页了.
在Page_load 里的查询部分要加上if(!IsPostBack())判断.
[/Quote]
可能我没表达清楚,我的问题是:
当选择具体部门之后,第一页显示是正常的,第二次在 GridView 中切换至第二页时( ObjectDataSource 的 SelectMethod 属性自动还原到初始化状态了)报错!
满衣兄 2009-06-25
  • 打赏
  • 举报
回复
你选择具体部门的时候页面刷新了,所以导致又还原到第一页了.
在Page_load 里的查询部分要加上if(!IsPostBack())判断.
cadust 2009-06-25
  • 打赏
  • 举报
回复
ObjectDataSource:
===========================
<asp:ObjectDataSource ID="srcEmployees" runat="server" DataObjectTypeName="Model.EmployeeInfo" TypeName="BLL.Employee" EnablePaging="True" SelectMethod="GetAllEmployees"></asp:ObjectDataSource>


Button
===========================
protected void btnSelect_Click(object sender, EventArgs e)
{
if (!DropDownList1.SelectedValue.Equals("0"))
{
srcEmployees.SelectCountMethod = "...";
srcEmployees.SelectMethod = "GetEmployeesByDepartment";
srcEmployees.SelectParameters.Clear();
srcEmployees.SelectParameters.Add(new Parameter("deptID", DbType.Int32, ddlDepartment.SelectedValue));

srcEmployees.DataBind();
}
}


GridView 就是最原始的数据源和分页属性配置,当选择某个部门并点击筛选按钮,第 1 页数据正常,当点击第 2 页回发之后,即出现错误,经测试,这时 srcEmployees 的 SelectMethod 属性已经被自动修改成 GetAllEmployees
wadsunglow 2009-06-25
  • 打赏
  • 举报
回复
贴主要代码,说的不够清楚
lengfeng8866 2009-06-25
  • 打赏
  • 举报
回复
收藏一下,帮楼主顶起!

*****************************************************************************
欢迎使用CSDN论坛专用阅读器 : CSDN Reader(附全部源代码)

http://feiyun0112.cnblogs.com/
cadust 2009-06-25
  • 打赏
  • 举报
回复
刚才跟踪了一下页面,发现在按钮事件驱动程序中通过代码设置 ObjectDataSource.SelectMethod 之后,只要是 PostBack ,该属性会自动还原成原始状态,这到底是什么样一个原理?
cadust 2009-06-25
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 wuyq11 的回复:]
绑定数据是把部门传递到查询语句。

if(!PostBack)
{
BindData();
}
在DropDownList 事件里调用BindData();
用三层了就不要用ObjectDataSource ,通过数据库操作类实现
[/Quote]

现在就是在想,在当前环境下,为什么会出这个问题?
在 GridView 的分页回送时,为什么 ObjectDataSource 的属性更改无法保持?

至于楼上的几个,说得不怎么靠谱啊....

62,243

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧