datagridview的膨胀和收缩功能的实现

datagridview的膨胀和收缩功能的实现
许多数据都有父节点和子节点,我们希望单击父节点在父节点下展开子节点的数据。

例如,一个医院的部门表,由父亲部和儿童部,点击父亲部,在父亲节可以显示所有部门下属部。

让我们来谈谈如何在DataGridView中这样做。

首先,创建示例数据:

样本数据的SQL
创建表的部门

id int(1,1)不是null,
DName varchar(20)空,
dparentid int空,
Dtelphone varchar(20)空,
Dhospital varchar(50)空


插入部值('outpatient室,1,'1111 ','xxx医院)
插入部值('outpatient内科,1,'2222 ','xxx医院)
Insert into Department values ('outpatient operation', 1,'3333','XXX hospital')
插入部值('outpatient儿科,1,'4444 ','xxx医院)
插入部值('nerve内部,2,'5555 ','xxx医院)
插入部值('department神经外科',2,'6666 ','xxx医院)
插入部('hospitalized值操作,2,'7777 ','xxx医院)
插入部值('hospitalized康复,2,'8888 ','xxx医院)
事实上,这个想法很简单。当父节点推出,新的DataGridViewRow插入父节点下。当父节点的子节点收缩,DataGridViewRow删除父节点下。

为了简单起见,代码中读取的数据是硬编码的。

父母除了负荷数据,数据库中的列,我增加了两个新的栏目:isex和EX.
private void datagridbing(表表)
{
如果(table.rows.count > 0)
{
为(int i = 0;i < table.rows.count;i++)
{

int k = this.datagridview1.rows.add();
这datagridview1 DataGridViewRow行=。。行{ k };
行单元格;
行。细胞{名称}。值=表。行{我} {名称};
行。细胞{daddress}。值=表。行{我} {daddress};
行。细胞{dtelphone}。值=表。行{我} {dtelphone};
是否已用于显示/启动
行。细胞{isex},值为假;
为了显示/展开或收缩简单的符号,我只使用字符串,但用更漂亮的图片
行单元格{}。值;
}
}
}
下面是单元格的单击事件,它分别在事件的扩展中写入和退出

插入子节点:
字符串isex =这。datagridview1。行{ e.rowindex },{细胞isex}。value.tostring();
如果(这。datagridview1。列{ e.columnindex }。名字= =前isex = =假)
{
字符串ID =这。datagridview1。行{ } { e.rowindex。细胞IDvalue.tostring()};
数据表表= GetDataTable(选择*从哪儿dparentid =+身份证);
如果(table.rows.count > 0)
{
插入行
this.datagridview1.rows.insert(e.rowindex + 1,表行。计数);
为(int i = 0;i < table.rows.count;i++)
{
这datagridview1 DataGridViewRow行=。。行{ e.rowindex +我+ 1 };
row.defaultcellstyle.backcolor = color.cadetblue;
行单元格;
行。细胞{名称}。值=表。行{我} {名称};
行。细胞{daddress}。值=表。行{我} {daddress};
行。细胞{dtelphone}。值=表。行{我} {dtelphone};
}
}
/ / isex为true,说明节点已扩大
这个datagridview1。行{ e.rowindex },{细胞isex}。值为真;
这个datagridview1。行{ } { e.rowindex。细胞前}。值= ;
删除子节点:
如果(这。datagridview1。列{ e.columnindex }。名字= =前isex = =真的)
{
字符串ID =这。datagridview1。行{ } { e.rowindex。细胞IDvalue.tostring()};
数据表表= GetDataTable(选择*从哪儿dparentid =+身份证);
如果(table.rows.count > 0)
{
使用删除
为(int i = 0;i < table.rows.count;i++)
{
foreach(DataGridViewRow排在这。datagridview1。行)
{
如果(行。细胞{id}。value.equals(表。行{我} {ID))))
{
this.datagridview1.rows.remove(行);
}
}
}
}
/ isex为false,说明节点已经萎缩
这个datagridview1。行{ e.rowindex },{细胞isex},值为假;
这个datagridview1。行{ } { e.rowindex。细胞前}。值=+;
}
通过比较ID,我们只需要确定一个行和更多的循环,因为子节点的父节点下,所以我们可以确定行数的子节点的位置,所以RemoveAt()方法更好。
RemoveAt / /利用
为(int i = table.rows.count;我> 0;我--)
{
删除行
this.datagridview1.rows.removeat(我+ e.rowindex);
}
上面的方法是通过连续插入和删除来实现的,但是与数据库的交互变得非常频繁,一个更好的方法应该是插入一次,然后隐藏或显示行以达到我们的效果。

为此,我们还将两个列添加到网格中:

IsInsert:确定是否行已插入子节点的数据或不。

行数:它是用来节省下的子节点插入的行数。

方法datagridbing,绑定数据时,应增加一列:
是否插入
行。细胞{isinsert},值为假;
当添加节点时,我们还要做一个判断。如果IsInsert是假的,你插入的数据,如果这是真的,数据显示。

折叠线
如果(这。datagridview1。列{ e.columnindex }。名字= =前isex = =假)
{
如果(这。datagridview1。行{ } { e.rowindex。细胞isinsert)(}。value.tostring = =假)
{
字符串ID =这。datagridview1。行{ } { e.rowindex。细胞IDvalue.tostring()};
数据表表= GetDataTable(选择*从哪儿dparentid =+身份证);
如果(table.rows.count > 0)
{
/ /插入行
this.datagridview1.rows.insert(e.rowindex + 1,表行。计数);
为(int i = 0;i < table.rows.count;i++)
{
这datagridview1 DataGridViewRow行=。。行{ e.rowindex +我+ 1 };
row.defaultcellstyle.backcolor = color.cadetblue;
行单元格;
行。细胞{名称}。值=表。行{我} {名称};
行。细胞{daddress}。值=表。行{我} {daddress};
行。细胞{dtelphone}。值=表。行{我} {dtelphone};
}
这个datagridview1。行{ e.rowindex },{细胞isinsert}。值为真;
这个datagridview1。行{ e.rowindex }。细胞{行数值= table.rows.count };
}
}
其他的
{
显示数据
int行数= convert.toint32(这个。datagridview1。行{ e.rowindex }。细胞{行数}。值);
为(int i = 1;i <行数;i++)
{
这个datagridview1。行{ e.rowindex +我=真实可见的};
}
}
/ / isex为true,说明节点已扩大
这个datagridview1。行{ e.rowindex },{细胞isex}。值为真;
这个datagridview1。行{ } { e.rowindex。细胞前}。值= ;
}
当我们收缩时,我们可以直接隐藏线。

收缩线
如果(这。datagridview1。列{ e.columnindex }。名字= =前isex = =真的)
{
int行数= convert.toint32(这个。datagridview1。行{ e.rowindex }。细胞{行数}。值);
为(int i = 1;i <行数;i++)
{
隐藏行
这个datagridview1。行{ e.rowindex +我}。可视=假;
}
/ isex为false,说明节点已经萎缩
这个datagridview1。行{ e.rowindex },{细胞isex},值为假;
这个datagridview1。行{ } { e.rowindex。细胞前}。值=+;
}
我们都知道,如何实现DataGridView收缩我希望你不仅知道如何做到这一点,而且还做一些实验。
免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部