通过上面三个控件做出一个综合案例
DataGridView控件的主要属性
属性 | 说明 |
---|---|
AutoGenerateColumns | 设置DataGridView是否自动创建列Columns |
Columns | 包含的列的集合 |
DataSource | DataGridView的数据源 |
ReadOnly | 是否可以编辑单元格 |
TreeView的主要属性和事件
属性 | 说明 |
---|---|
Nodes | TreeView中的所有根节点 |
ImageList | 存放TreeView中节点的图像 |
ImageIndex | 节点默认的图像索引 |
SelectedImageIndex | 节点选中时图像的索引 |
SelectedNode | 当前选中的节点 |
事件 | 说明 |
AferSelect | 节点选中后发生事件 |
DataView的主要属性
属性 | 说明 |
---|---|
Table | 用于获取或设置数据源DataTable |
Sort | 获取或设置DataView的一个或多个排序列以及排序顺序 |
RowFilter | 获取或设置用于筛选在DataView中查看哪些行的表达式 |
Count | 在应用RowFilter后,获取DataView中的行数 |
通过三个控件,我们要做下简单的树形控件筛选
1.此时我们需要绑定数据库
2. DBHelper帮助类
public class DBHelper
{
#region 连接字符串对象
/// <summary>
/// 创建字符串连接对象
/// </summary>
public static string connString = "server=.; database=MySchool; uid=sa; pwd=sa";
#endregion
#region 查询返回受影响的行数
/// <summary>
/// 增删改通用方法
/// </summary>
/// <param name="sql">T-SQL脚本</param>
/// <param name="paras">可选参数数组</param>
/// <returns></returns>
public static int ExecuteNonQuery(string sql,params SqlParameter[] paras)
{
//数据库连接式连接
//using释放资源conn.Close(); 异常处理机制
int result = -1;
using (SqlConnection conn = new SqlConnection(connString))
{
//打开数据库
conn.Open();
//执行脚本的对象
SqlCommand comm = new SqlCommand(sql, conn);
//添加可选参数
comm.Parameters.AddRange(paras);
//返回受影响行数
result = comm.ExecuteNonQuery();
}
return result;
}
#endregion
#region 查询返回单行单列
/// <summary>
/// 简单查询
/// </summary>
/// <param name="sql">T-SQL脚本</param>
/// <param name="paras">可选参数数组</param>
/// <returns></returns>
public static object ExecuteScalar(string sql, params SqlParameter[] paras)
{
//数据库连接式连接
//using释放资源conn.Close(); 异常处理机制
object result = null;
using (SqlConnection conn = new SqlConnection(connString))
{
//打开数据库
conn.Open();
//执行脚本的对象
SqlCommand comm = new SqlCommand(sql, conn);
//添加可选参数
comm.Parameters.AddRange(paras);
//返回受影响行数
result = comm.ExecuteScalar();
}
return result;
}
#endregion
#region 查询返回多行多列
/// <summary>
/// 多行多列查询
/// </summary>
/// <param name="sql">T-SQL脚本</param>
/// <param name="paras">可选参数数组</param>
/// <returns></returns>
public static SqlDataReader ExecuteReader(string sql, params SqlParameter[] paras)
{
//数据库连接式连接
//using释放资源conn.Close(); 异常处理机制
SqlConnection conn = new SqlConnection(connString);
//打开数据库
conn.Open();
//执行脚本的对象
SqlCommand comm = new SqlCommand(sql, conn);
//添加可选参数
comm.Parameters.AddRange(paras);
//返回多行多列
return comm.ExecuteReader(CommandBehavior.CloseConnection);
}
#endregion
#region 返回临时表 DataTable
public static DataTable GetDataTable(string sql,params SqlParameter[] paras)
{
//创建临时表
DataTable dt = new DataTable();
//创建Connection对象
SqlConnection conn = new SqlConnection(connString);
//断开式连接
SqlCommand comm = new SqlCommand(sql,conn);
comm.Parameters.AddRange(paras);
//创建数据适配器
SqlDataAdapter adapter = new SqlDataAdapter(comm);
adapter.Fill(dt); //Fill数据填充 支持DataTable DataSet
return dt;
}
#endregion
#region 返回临时表 DataSet
public static DataSet GetDataSet(string sql, params SqlParameter[] paras)
{
//创建临时表
DataSet ds = new DataSet();
//创建Connection对象
SqlConnection conn = new SqlConnection(connString);
//断开式连接
SqlCommand comm = new SqlCommand(sql, conn);
comm.Parameters.AddRange(paras);
//创建数据适配器
SqlDataAdapter adapter = new SqlDataAdapter(comm);
adapter.Fill(ds); //Fill数据填充 支持DataTable DataSet
return ds;
}
#endregion
#region 返回适配器
public static SqlDataAdapter GetDataAdapter(string sql,params SqlParameter[] paras)
{
SqlConnection conn = new SqlConnection(connString);
SqlCommand comm = new SqlCommand(sql,conn);
comm.Parameters.AddRange(paras);
SqlDataAdapter adapter = new SqlDataAdapter(comm);
return adapter;
}
#endregion
}
3. 拖拽SplitContainer分割控件
4. 推拽TreeView控件并拖拽到分割控件中
5. 拖拽DataGridView控件
6. 推拽Label控件,TextBox控件,ComboBox控件,Button控件 进行适当布局
7. 向TreeView中添加节点
8. 添加根节点和子节点,并修改Text属性值
9. 点击DataGridView编辑列
10. 添加列
设置名称 只好和数据库中字段名一直(Name)除外
页眉文本 就是显示的字段文本
11. 绑定DataPropertyName数据库中的字段
Name 控件名称
DataPropertyName 数据库中的字段
HeaderText 显示字段
12. 布局完成后,我们可以写业务代码了
13. 加载时,加载绑定下拉框和绑定数据源
#region 加载事件
private void FrmTree_Load(object sender, EventArgs e)
{
//绑定数据
BindData();
//绑定cboBox
BindComBoBox();
}
#endregion
#region 绑定数据
DataTable dt;
public void BindData()
{
//关闭自动填充列
this.dgvStudent.AutoGenerateColumns = false;
//编写T-SQL语句
string sql = "select * from Student,Grade where Student.Gradeid=Grade.GradeId";
dt = DBHelper.GetDataTable(sql);
//运行T-SQL脚本
this.dgvStudent.DataSource = dt;
}
#endregion
#region 绑定选择框中的数据
public void BindComBoBox()
{
string sql = "select * from Grade";
DataTable dt = DBHelper.GetDataTable(sql);
//创建列
DataRow dr = dt.NewRow();
dr["GradeId"] = -1;
dr["GradeName"] = "全部";
//赋值
dt.Rows.InsertAt(dr, 0);
//赋值到控件中
this.cboGrade.ValueMember = "GradeId";
this.cboGrade.DisplayMember = "GradeName";
this.cboGrade.DataSource = dt;
}
#endregion
14.选中节点时发生事件
#region 选中节点事件
private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
{
SearchStudentByTree();
}
#endregion
#region 点击节点查询方法
public void SearchStudentByTree()
{
//获取节点
string str = this.treeView1.SelectedNode.Text;
//获取节点的深度
int lvi = this.treeView1.SelectedNode.Level;
//创建DataView
DataView dv = new DataView(dt);
//判断节点
if (lvi == 1)
{
dv.RowFilter = $"GradeName='{str}'";
}
else if (lvi==2)
{
//获取父级
string parent = this.treeView1.SelectedNode.Parent.Text;
dv.RowFilter = $"Sex='{str}' and GradeName='{parent}'";
}
//绑定数据
this.dgvStudent.DataSource = dv;
}
#endregion
15. 单击查询按钮,通过DataView进行筛选数据
#region 查询
private void btnSearch_Click(object sender, EventArgs e)
{
DataView dv = new DataView(dt);
//判断
if(!this.txtName.Text.Equals(String.Empty) && this.cboGrade.Text=="全部")
{
dv.RowFilter = $"StudentName like '%{this.txtName.Text}%'";
}
else if(this.txtName.Text.Equals(String.Empty) && this.cboGrade.Text != "全部")
{
dv.RowFilter = $"Gradeid = '{this.cboGrade.SelectedValue}'";
}
else if(!this.txtName.Text.Equals(String.Empty) && this.cboGrade.Text != "全部")
{
dv.RowFilter = $"Gradeid = '{this.cboGrade.SelectedValue}' and StudentName like '%{this.txtName.Text}%'";
}
this.dgvStudent.DataSource= dv;
}
#endregion
16. 此时运行,就可以实现查询功能了
希望对你有帮助!