接上回书说,我们实现了基本的显示和排序.那么今天就来做做查询和分页.
首先先做通过传递普通参数的形式来实现条件查询的.这里仅仅做个演示.
我们要通条件查询那就需要修改我们原来的查询方法了.
[DataObjectMethod(DataObjectMethodType.Select)] public static List<UserInfo> GetUserInfoList(string name, string sort) { ........ }
我们这里加了一个参数用来传入要查询的用户名称.
但是这里一定要注意.当你修改了后面的方法后一定要做一件事情.
那就是配置数据源
因为我们修改后面的方法参数所以这里也变化了如果不重新配置数据源就会报一个错误那就是
当你重新配置数据源的时候就可以给你的参数设置值的来源了
这里我给name参数设置了值的来源为控件类型.控件名为txt_name,这样你就可以通过传递的值来改变你返回集合的内容了.而且这里因为我们指定数据来源是txt_name所以当你点击查询按钮的时候,他会自动重新绑定GridView控件.也就是你不必再执行GridView的DataBind方法了
上面已经实现了一点点效果了那最后就实现我们这次要最终想要的结果吧.
在传递值的时候会发现如果传递多个查询条件的时候参数还是比较多的.而且我们本来是有那个UserInfo类的,那我们干脆把要查询的条件内容放到一个对象里传过来好了,那样还能通过他的属性Set方法来验证一下.
public static List<UserInfo> GetUserInfoList(UserInfo info,int start,int max, string sort) { ...... }
那么我们捎带的就把分页也做了吧.
根据我们的要求就把原来的方法改写成↑这样的了.传递了一个对象和分页的两个参数
在这里我们可以和上次说到的排序那样来在ObjectDataSource中设置这两个参数他们分别是
StartRowParameterName和MaximumRowsParamterName
但是我这里使用通过在ObjectDataSource的Selecting事件中给这个赋值,这样就直接可以使用第三方的分页控件了
protected void ObjectDataSource1_Selecting(object sender, ObjectDataSourceSelectingEventArgs e) { Models.UserInfo info = new Models.UserInfo(); info.uname = txt_name.Text; e.InputParameters["info"] = info; e.InputParameters["start"]=传入的值; e.InputParameters["max"]=传入的值; }
这样我们就可以将你自己赋值的info对象和从分页控件得来的start和max值传入到BLL中的Select方法中了.
这里讲述了如何通过事件给已订好的方法动态的传递你的值.
这里需要注意:因为现在的参数是后期才赋值的所以你必须在你的查询按钮中添加一句话
protected void btn_query_Click(object sender, EventArgs e) { GridView1.DataBind();//这里必须重新绑定一下GridView }