UI图:
功能实现:
1.勾选住哪个选项之后,就加入了筛选。支持姓名的模糊查询。
2.对筛选出来的数据可以直接修改,并更新回数据库。
说明:显示的数据来自T_User表。数据显示控件使用的是 ListView,数据源控件使用的是 ObjectDataSource,已有T_User表的数据集 。
思路:ListView使用数据源ObjectDataSource,ObjectDataSource指定使用DS_User数据集,Select方法使用默认的方法。这样,刚进入界面,显示所有的用户。
怎么实现筛选呢:方法1:有三个条件,就有9中可能情况,在DS_User数据集中定义9个方法。通过判断,指定ObjectDataSource使用哪个Select方法就可以了。
方法2:当点击查询后,根据筛选生成特定的Select语句。然后修改ObjectDataSource使用的Select方法就可以了。
方法3:不使用ObjectDataSource,根据筛选生成特定的Select语句,自己通过SqlHelper执行,将结果显示在GridView中。
分析:方法1过于繁琐,当只需要定义1、2个方法时,还是可以使用的。方法3:不能对筛选出的结果数据进行修改,比如说更新了。因此,当只是显示数据的时候,可以使用。
而要使用方法2:就要解决这个问题:
如何通过代码来设置ObjectDataSource使用数据集中的哪个Select方法
如何通过代码来设置数据集中的Select方法的Select语句
实现代码:
定义一个WherePart属性,来接收Where部分的语句。并设置MySelect方法。
在数据集DS_User界面右击选择【查看代码】添加如下代码
namespace InvoicingManagement.DAL.DS_UserTableAdapters { public partial class T_UserTableAdapter { public static string WherePart { get; set; } public virtual DS_User.T_UserDataTable MySelect() { SqlCommand cmd = this.Connection.CreateCommand(); cmd.CommandText = "SELECT UserId, FWorkId, FName, FPassword, LevelId FROM dbo.T_User " + WherePart; cmd.CommandType = System.Data.CommandType.Text; this.Adapter.SelectCommand = cmd; DS_User.T_UserDataTable dataTable = new DS_User.T_UserDataTable(); this.Adapter.Fill(dataTable); return dataTable; } } }
在查询按钮中的
//根据筛选得到Where部分的字符串
List<string> list = new List<string>(); list.Add(" LevelId>2 ");// 不能检索到【管理员】以上权限的人员,这也解决了【“ddl_level”有一个无效 SelectedValue,因为它不在项目列表中。】的问题 if (chkWorkId.Checked) { list.Add(string.Format(" FWorkId = {0} ", txtWorkId.Text.Trim())); } if (chkName.Checked) { list.Add(string.Format(" FName like '%{0}%' ", txtName.Text.Trim())); } if (chkLevel.Checked) { list.Add(string.Format(" LevelId = {0} ", ddl_level.SelectedValue)); } string s = " where " + string.Join("and", list.ToArray());
//设置Select语句
T_UserTableAdapter.WherePart = s; //指定使用哪个方法 ods_User.SelectMethod = "MySelect"; listview_User.DataBind();
在DataSet中添加自定义方法与属性