请教各位大神gridview 如何实现图片里的功能
请问各位大神gridview 怎么实现图片里的功能啊

用gridview来实现的
图片里的 所属部门 和姓名是headertext
下面的办公室,销售部和赵钱孙李等是从数据库读出来填充到里面的。
请问下,有知道第一列的部门怎么实现根据后面的姓名来合并行啊。
这个部门里的数据有两个姓名,那部门所属就合并两行,有三个姓名就合并三行。
我图片的功能是写死的,已经知道某个部门里有几个姓名,再来合并行的。如果数据是动态的,如果办公室里插入了一个姓名,那办公室就自动合并三行。
写的有点多。本人新手,最好有参考代码,谢谢啊
------解决思路----------------------
Repeat什么的更方便实现吧,或者自己组织table也可以
------解决思路----------------------
http://www.cnblogs.com/nianming/archive/2012/10/10/2719103.html
------解决思路----------------------
未合并前:

调用:
合并后:

------解决思路----------------------
搜索YYControl,有现成的控件,可以实现合并
------解决思路----------------------
注意看前面写的一段话“绑定的数据源对需要合并的列先排序”。
你在数据源中对部门这一列排序后进行绑定就可以了。
------解决思路----------------------
你让其他标题头也可以排序,这就势必造成目标合并列变得不连贯,又何来合并之说呢,你的这两种需求相互之间本就存在矛盾,你自己想想呢?
当然,你有另一个折中方法,就是先按需要合并的那一列排序,再按另一个标题列进行排序,总之,需要合并的那列要首先排序才对,譬如:
------解决思路----------------------
表头的合并放在最后一步,看看结果
用gridview来实现的
图片里的 所属部门 和姓名是headertext
下面的办公室,销售部和赵钱孙李等是从数据库读出来填充到里面的。
请问下,有知道第一列的部门怎么实现根据后面的姓名来合并行啊。
这个部门里的数据有两个姓名,那部门所属就合并两行,有三个姓名就合并三行。
我图片的功能是写死的,已经知道某个部门里有几个姓名,再来合并行的。如果数据是动态的,如果办公室里插入了一个姓名,那办公室就自动合并三行。
写的有点多。本人新手,最好有参考代码,谢谢啊
------解决思路----------------------
Repeat什么的更方便实现吧,或者自己组织table也可以
------解决思路----------------------
http://www.cnblogs.com/nianming/archive/2012/10/10/2719103.html
------解决思路----------------------
public static void CombineCell(GridView gv, int c)
{
if (gv.Rows.Count < 2
------解决思路----------------------
c < 0
------解决思路----------------------
c >= gv.HeaderRow.Cells.Count)
{
return;
}
int r = 1;
TableCell oTc = gv.Rows[0].Cells[c], nTc;
for (int a = 1; a < gv.Rows.Count; a++)
{
nTc = gv.Rows[a].Cells[c];
if (oTc.Text == nTc.Text)
{
r++;
nTc.Visible = false;
oTc.RowSpan = r;
oTc.VerticalAlign = VerticalAlign.Middle;
}
else
{
r = 1;
oTc = nTc;
}
}
}
未合并前:
调用:
//合并GridView1第一索引列的相同单元格(绑定的数据源对需要合并的列先排序)
CombineCell(GridView1, 1);
合并后:
------解决思路----------------------
搜索YYControl,有现成的控件,可以实现合并
------解决思路----------------------
注意看前面写的一段话“绑定的数据源对需要合并的列先排序”。
你在数据源中对部门这一列排序后进行绑定就可以了。
------解决思路----------------------
你让其他标题头也可以排序,这就势必造成目标合并列变得不连贯,又何来合并之说呢,你的这两种需求相互之间本就存在矛盾,你自己想想呢?
当然,你有另一个折中方法,就是先按需要合并的那一列排序,再按另一个标题列进行排序,总之,需要合并的那列要首先排序才对,譬如:
//如果仅是默认排序
list = list.OrderBy(p => p.部门).ToList();
//如果要按编号排序,总之要合并的那列要先排序。
list = list.OrderBy(p => p.部门).ThenBy(p => p.编号).ToList();
GridView1.DataSource = list;
CombineCell(GridView1, 1);
------解决思路----------------------
表头的合并放在最后一步,看看结果