使用DataGridView,TreeView,DataView 制作树型控件的展示数据和节点筛选

通过上面三个控件做出一个综合案例
使用DataGridView,TreeView,DataView 制作树型控件的展示数据和节点筛选_第1张图片

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.此时我们需要绑定数据库
使用DataGridView,TreeView,DataView 制作树型控件的展示数据和节点筛选_第2张图片使用DataGridView,TreeView,DataView 制作树型控件的展示数据和节点筛选_第3张图片
2. DBHelper帮助类

public class DBHelper
{
    #region 连接字符串对象
    /// 
    /// 创建字符串连接对象
    /// 
    public static string connString = "server=.; database=MySchool; uid=sa; pwd=sa";
    #endregion

    #region 查询返回受影响的行数
    /// 
    /// 增删改通用方法
    /// 
    /// T-SQL脚本
    /// 可选参数数组
    /// 
    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 查询返回单行单列
    /// 
    /// 简单查询
    /// 
    /// T-SQL脚本
    /// 可选参数数组
    /// 
    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 查询返回多行多列
    /// 
    /// 多行多列查询
    /// 
    /// T-SQL脚本
    /// 可选参数数组
    /// 
    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分割控件
使用DataGridView,TreeView,DataView 制作树型控件的展示数据和节点筛选_第4张图片
4. 推拽TreeView控件并拖拽到分割控件中
使用DataGridView,TreeView,DataView 制作树型控件的展示数据和节点筛选_第5张图片
5. 拖拽DataGridView控件
使用DataGridView,TreeView,DataView 制作树型控件的展示数据和节点筛选_第6张图片
6. 推拽Label控件,TextBox控件,ComboBox控件,Button控件 进行适当布局
使用DataGridView,TreeView,DataView 制作树型控件的展示数据和节点筛选_第7张图片7. 向TreeView中添加节点
使用DataGridView,TreeView,DataView 制作树型控件的展示数据和节点筛选_第8张图片
8. 添加根节点和子节点,并修改Text属性值
使用DataGridView,TreeView,DataView 制作树型控件的展示数据和节点筛选_第9张图片
9. 点击DataGridView编辑列
使用DataGridView,TreeView,DataView 制作树型控件的展示数据和节点筛选_第10张图片
10. 添加列

设置名称 只好和数据库中字段名一直(Name)除外
页眉文本 就是显示的字段文本

使用DataGridView,TreeView,DataView 制作树型控件的展示数据和节点筛选_第11张图片
11. 绑定DataPropertyName数据库中的字段

Name 控件名称
DataPropertyName 数据库中的字段
HeaderText 显示字段

使用DataGridView,TreeView,DataView 制作树型控件的展示数据和节点筛选_第12张图片
12. 布局完成后,我们可以写业务代码了
使用DataGridView,TreeView,DataView 制作树型控件的展示数据和节点筛选_第13张图片
13. 加载时,加载绑定下拉框和绑定数据源
使用DataGridView,TreeView,DataView 制作树型控件的展示数据和节点筛选_第14张图片

#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.选中节点时发生事件
使用DataGridView,TreeView,DataView 制作树型控件的展示数据和节点筛选_第15张图片

#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进行筛选数据
使用DataGridView,TreeView,DataView 制作树型控件的展示数据和节点筛选_第16张图片

#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. 此时运行,就可以实现查询功能了
使用DataGridView,TreeView,DataView 制作树型控件的展示数据和节点筛选_第17张图片

希望对你有帮助!

你可能感兴趣的:(C#/.NET)