一、 直接在已有数据中筛选;不必重新检索数据
(1)查询两张表的数据
/// <summary> /// 加载所有的数据 /// </summary> private void FillDataStudent() { //sql语句 sql = new StringBuilder(); //如果是2张表的数据,某一个字段不能写具体的表名.字段名;直接写字段名 sql.AppendLine("SELECT StudentNo,StudentName,Sex,GradeName,Phone FROM dbo.Student ,dbo.Grade WHERE dbo.Grade.GradeId = dbo.Student.GradeId"); //适配器对象 da = new SqlDataAdapter(sql.ToString(), DBHelper.conn); //填充数据 da.Fill(ds); //绑定数据到控件 dgvStudent.DataSource = ds.Tables[0]; }(2)在原来的基础上根据条件查询年级名称的学生 或是根据年级名称与性别查询
/// <summary> /// 树的事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void tvStudent_AfterSelect(object sender, TreeViewEventArgs e) { //创建数据视图对象 DataView dv = new DataView(ds.Tables[0]); //声明字符串变量 string rowFilter=string.Empty; //获得当前节点的层次 int index = tvStudent.SelectedNode.Level; //(1)使用 RowFilter 属性 //筛选的条件 类似查询语句中 WHERE 后面部分 if (index == 1) //GradeName='S1' { rowFilter = string.Format("GradeName='{0}'",tvStudent.SelectedNode.Text); } else if (index == 2) //GradeName='S1' AND Sex='女' { rowFilter = string.Format("GradeName='{0}' and sex='{1}'", tvStudent.SelectedNode.Parent.Text, tvStudent.SelectedNode.Text); } //过滤 dv.RowFilter = rowFilter; //重新绑定数据 ; dgvStudent.DataSource = dv; }(3)在原来的基础上根据条件查询学生名称的学生
的
/// <summary> /// 文本按下回车键事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void txtName_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode==Keys.Enter) { //1创建数据视图对象 // DataView dv = new DataView(ds.Tables[0]); // 为减少实例化DataView对象的步骤,也可使用DataTable的DefaultView属性得到DataView DataView dv = ds.Tables[0].DefaultView; //2条件筛选 dv.RowFilter = string.Format("StudentName like '%{0}%'",this.txtName.Text.Trim()); //使用 Sort 属性排序的条件 类似查询语句中 ORDER BY 后面部分 dv.Sort = "studentno desc"; //3重新绑定数据 ; dgvStudent.DataSource = dv; } }