属性 | 说明 |
---|---|
AutoGenerateColumns | 设置DataGridView是否自动创建列Columns |
Columns | 包含的列的集合 |
DataSource | DataGridView的数据源 |
ReadOnly | 是否可以编辑单元格 |
属性 | 说明 |
---|---|
Nodes | TreeView中的所有根节点 |
ImageList | 存放TreeView中节点的图像 |
ImageIndex | 节点默认的图像索引 |
SelectedImageIndex | 节点选中时图像的索引 |
SelectedNode | 当前选中的节点 |
事件 | 说明 |
AferSelect | 节点选中后发生事件 |
属性 | 说明 |
---|---|
Table | 用于获取或设置数据源DataTable |
Sort | 获取或设置DataView的一个或多个排序列以及排序顺序 |
RowFilter | 获取或设置用于筛选在DataView中查看哪些行的表达式 |
Count | 在应用RowFilter后,获取DataView中的行数 |
通过三个控件,我们要做下简单的树形控件筛选
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分割控件
4. 推拽TreeView控件并拖拽到分割控件中
5. 拖拽DataGridView控件
6. 推拽Label控件,TextBox控件,ComboBox控件,Button控件 进行适当布局
7. 向TreeView中添加节点
8. 添加根节点和子节点,并修改Text属性值
9. 点击DataGridView编辑列
10. 添加列
设置名称 只好和数据库中字段名一直(Name)除外
页眉文本 就是显示的字段文本
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
#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
#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
希望对你有帮助!