TreeView控件
TreeNode类代表数中的一个节点,TreeView控件由多个TreeNode对象组成。通过Treeview控件和TreeNode对象,可以实现树状结构数据的添加、修改、输出、显示。TreeView控件的Nodes属性表示TreeView控件的数节点集
1.TreeView控件的属性和事件
分类 | 名称 | 说明 |
---|---|---|
Nodes | TreeView控件中的所有根节点集合 | |
属性 | SelectedNode | 当前选中的父节点 |
ImageList | 存放TreeView控件中节点的图像 | |
ImageIndex | 节点默认的图片索引 | |
事件 | AfterSelect | 节点选中后发生 |
2.TreeView控件的节点
属性 | 说明 |
---|---|
Text | 节点上的文字 |
Nodes | 当前节点包含的子节点的集合 |
ImageIndex | 节点默认的图片索引 |
SelectedImageIndex | 节点选中时图片的索引 |
ParentNode | 当前节点的父节点 |
Level | 节点在树中的深度,从0开始 |
3.获取选中的树节点
private void treeView1_AfterSelect(object sender, TreeViewEventArgs e) {string name = string.Format("选中节点为{0},深度为{1}", this.treeView1.SelectedNode.Text,treeView1.SelectedNode.Level);MessageBox.Show(name);//AfterSelect 选中时发生//this.treeview1.selectedNode.text 选中的节点名称//treeview.selectedNode.Level 选中的节点深度 }
6.1.3修改”订单详情” 窗体
1.填充Treeview控件
(1)在窗体中创建BindingTree()方法,在此方法中编写代码,实现向Treeview控件中添加节点的功能
(2)连接数据库并获取sqlDataReader对象
(3)创建根节点(TreeNode nodes = new TreeNode(“所有订单”)),在读取数据库中的数据之前,先创建”所有订单”根节点。注意:根节点只有一个,因此不能将创建根节点的代码写在读取数据的循环语句中
(4)创建区域节点。创建区域节点对象,并将区域表中的区域名和区域编号分别赋值给这个节点对象的Text和tag属性。Tag属性用于设置不需要显示的信息。在此设置区域编号是为了后续单击区域节点时获取区域编号并在右侧的datagridview控件中显示此区域的订单信息。通过Treeview控件的Nodes[0]可以获取”所有订单”根节点对象。然后通过根节点对象的Nodes属性的Add()方法,将区域节点添加到根节点中
public void BindingTree(){ try { DBHelper db = new DBHelper(); db.OPenDB(); string sql = string.format("select * from region"); //读取数据 SqlCommand cmd = new SqlCommand(sql,db.conn); sqlDataReader dr = cmd.ExecuteReader(); this.tvRegion.Nodes.Add(new TreeNode("所有订单")); //向插入根节点 while(dr.Read()) //循环输出 { TreeNode node = new TreeNode(); //实例化 node.Text = dr["regionName"].ToString(); //设置区域名 node.Tag = Convert.ToInt32(dr["rid"]); //设置区域编号 tvRegion.Nodes[0].Nodes.Add(node); //添加到根节点的Nodes集合中 node.Nodes.Add(new TreeNode("当前订单")); node.Nodes.Add(new TreeNode("历史订单"));} }catch(exception) { MessageBox.Show("系统出错,请联系管理员","提示"); }finally {dr.Close();db.Close(); }}
2.添加拆分器
如果要实现左侧Treeview控件和右侧DataGirdView控件,需要在两个控件之间添加一个拆分器Splitcontainer控件
DataView
认识DataView数据视图
DataView数据视图可以方便的对DataTable中的数据进行排序和筛选。DataView对象能与WinForm控件进行数据绑定。可针对一个DataTable对象创建多个DataView对象。创建DataView对象的语法如下
DataView 数据视图名 = new DataView(DataTable 对象);或 DataView 数据视图名 = DataTable 对象.DefaultView
属性 | 说明 |
---|---|
Sort | 获取或设置DataView对象的一个或多个排序及排序顺序 |
Table | 用于获取或设置源DataTable |
RowFilter | 获取或设置用于筛选在DataView对象中查询数据的表达式 |
Count | 在使用RowFilter属性后,获取DataView对象中的行数 |
RowFilter属性可以设置查询条件,能够筛选出DataTable中符合查询条件的数据,与数据库查询语句中where子句的作用类似。代码如下
DataView dv = new DataView(dt.tables["user"]);dv.RowFilter = "uname like '%王%'";
通过Sort属性可以指定排序的条件,与数据库查询语句中order by子句后面的排序条件类似。按用户上网时间降序方式排序。代码如下
DataView dv = new DataView(dt.Tables["user"]);dv.Sort = "starttime desc";
针对于点击Treeview中节点查询datagridView表中的数据,从而改变datagridview显示的数据,这个方法需要在AfterSelect事件中执行
///点击节点查询方法private void treeview_AfterSelect(object sender, TreeviewEventArgs e){//1.获取选中行的树节点string str = this.treeView1.SelectedNode.Text;//2.获取节点的深度int lvi = this.treeview1.SelectedNode.Level;//3.创建DataViewDataView dv = new DataView(dt.Tables["camera"]);//dt是DataSet从数据库储存的数据//判断节点if(lvi ==1) {dv.RowFilter = "regionName = '{0}'",str;//以下代码可以按照是否有下一层子节点执行/*} else if(lvi == 2){ 获取父级 string parent = this.treeView1.SelectedNode.Parent.Text; dv.RowFilter = $"Sex='{str}' and regionName ='{parent}'"; }*/dv.Sort = "time desc"; //按降序顺序排序//绑定数据DataGridview.DataSource = dv;
}