gridview合并列

iymmgd 2011-09-16 09:33:47
合并这个合并了很久了,在网上也找了很多代码看,还是实现不了我想要的效果。
请各位大侠帮我看看,最好希望哪位能帮我写一下代码了,非常感谢。

要求合并1和2列中相同,相邻的单元格。

gridview


excel:
...全文
736 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
michaela_soul 2013-01-07
  • 打赏
  • 举报
回复
好吧,我先mark下,
WangxiaoluWang 2011-12-23
  • 打赏
  • 举报
回复
我晕,我分明是标记了下,怎么没看到我的回复…
WangxiaoluWang 2011-12-23
  • 打赏
  • 举报
回复
好吧,我先标记下,我也需要这种效果了…
风骑士之怒 2011-09-20
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 iymmgd 的回复:]
引用 8 楼 wknight_it 的回复:
我这里只合并了‘课别’列,‘班别’列合并也是同样的原理,你自己参悟下。

里面的课别下面的全是从数据库表中来的,他会随表改变而改变。
[/Quote]

我很纳闷,我的例子本来就是从数据出发的,你完全可以替代成数据库的记录集。。。。

iymmgd 2011-09-19
  • 打赏
  • 举报
回复
已经搞定了,多谢各位,多谢SP1234.。
分分了。
iymmgd 2011-09-18
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 wknight_it 的回复:]
我这里只合并了‘课别’列,‘班别’列合并也是同样的原理,你自己参悟下。
[/Quote]
里面的课别下面的全是从数据库表中来的,他会随表改变而改变。
风骑士之怒 2011-09-17
  • 打赏
  • 举报
回复
别忘了引用jquery库的文件
风骑士之怒 2011-09-17
  • 打赏
  • 举报
回复
我这里只合并了‘课别’列,‘班别’列合并也是同样的原理,你自己参悟下。
风骑士之怒 2011-09-17
  • 打赏
  • 举报
回复
何不这么麻烦,后台只需要负责数据传输就行了,至于格式和样式完全由前台控制好了。比如你传回来的是一个table,你可以用js进行合并。。

我帮你写了个jquery例子,你可以直接浏览参考


<html>
<head>
<script src="jquery.js" language="javascript" ></script>
<style type="text/css">
<!--
body,td,th {
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 12px;
}
#gridview, #gridview td { border:1px #ccc solid; border-collapse:collapse; }
-->
</style></head>

<body>
<table id="gridview" width="386" border="0" cellspacing="0" cellpadding="6">
<tr>
<td width="59" align="center"><strong>课别</strong></td>
<td width="76" align="center"><strong>班别</strong></td>
<td width="73" align="center"><strong>班次</strong></td>
<td width="130" align="center"><strong>出勤时间</strong></td>
</tr>
<tr>
<td>陈伟勋</td>
<td>一班制</td>
<td>白班</td>
<td>2011-09-09</td>
</tr>
<tr>
<td>陈伟勋</td>
<td>一班制</td>
<td>夜班</td>
<td>2011-09-09</td>
</tr>
<tr>
<td>陈伟勋</td>
<td>两班制</td>
<td>白班</td>
<td>2011-09-09</td>
</tr>
<tr>
<td>陈伟勋</td>
<td>两班制</td>
<td>白班</td>
<td>2011-09-09</td>
</tr>
<tr>
<td>陈伟勋</td>
<td>两班制</td>
<td>夜班</td>
<td>2011-09-09</td>
</tr>
<tr>
<td>陈伟勋</td>
<td>三班制</td>
<td>早班</td>
<td>2011-09-09</td>
</tr>
<tr>
<td>陈伟勋</td>
<td>三班制</td>
<td>中班</td>
<td>2011-09-09</td>
</tr>
<tr>
<td>陈伟勋</td>
<td>三班制</td>
<td>晚班</td>
<td>2011-09-09</td>
</tr>
<tr>
<td>张文军</td>
<td>一班制</td>
<td>白班</td>
<td>2011-09-09</td>
</tr>
<tr>
<td>张文军</td>
<td>两班制</td>
<td>白班</td>
<td>2011-09-09</td>
</tr>
<tr>
<td>张文军</td>
<td>两班制</td>
<td>白班</td>
<td>2011-09-09</td>
</tr>
<tr>
<td>张文军</td>
<td>两班制</td>
<td>夜班</td>
<td>2011-09-09</td>
</tr>
<tr>
<td>张文军</td>
<td>三班制</td>
<td>夜班</td>
<td>2011-09-09</td>
</tr>
<tr>
<td>张文军</td>
<td>三班制</td>
<td>中班</td>
<td>2011-09-09</td>
</tr>
</table>
<script>
var grid = $("#gridview");
var rowCount = grid.find("tr").length - 1;
var flagRow = grid.find("tr:eq("+rowCount+")").find("td:eq(0)").html();
var sp = 0;
for(var i = rowCount; i >=0; i--) {
var tempRow = grid.find("tr:eq("+i+")");
if(flagRow == tempRow.find("td:eq(0)").html()) {
tempRow.find("td:eq(0)").remove();
}
else {
$("<td/>").attr("rowspan", rowCount-i-sp).html(flagRow).prependTo(tempRow.parent().find("tr:eq("+(i+1)+")"));
flagRow = tempRow.find("td:eq(0)").html();
sp = rowCount-i;
if(i != 0) {
tempRow.find("td:eq(0)").remove();
}
}
}
</script>
</body>
</html>
wangxinlong_ 2011-09-17
  • 打赏
  • 举报
回复
http://blog.csdn.net/21aspnet/article/details/1540301
看看他的博客gridview72般绝技,它里面讲的有合并表头,是3行3列.
PitTroll 2011-09-17
  • 打赏
  • 举报
回复
有时间研究研究用html的表格显示
wubudang 2011-09-17
  • 打赏
  • 举报
回复
我是觉得这种表格用GridView不太方便。我一般都是在后台写html的table的。像下面这种
前面单元格占的行根据后面单元格来确定的话,用GridView的效率并不怎么好。
萧炎 2011-09-17
  • 打赏
  • 举报
回复
关于这个问题我的博客里面有 LZ可以去看看
happytonice 2011-09-17
  • 打赏
  • 举报
回复
for (int i = gridview1.Rows.Count - 1; i > 0; i--)
{
if (gridview1.Rows[i].RowType == DataControlRowType.DataRow)
{
TableCell tCell = gridview1.Rows[i].Cells[2];
TableCell tCell_previous = gridview1.Rows[i - 1].Cells[2];

tCell.RowSpan = (tCell.RowSpan == 0) ? 1 : tCell.RowSpan;
tCell_previous.RowSpan = (tCell_previous.RowSpan == 0) ? 1 : tCell_previous.RowSpan;

if (tCell.Text.Trim() == tCell_previous.Text.Trim())
{
tCell.Visible = false;
tCell_previous.RowSpan += tCell.RowSpan;
}
}
}

一个合并gridview的。
Gemini Dean 2011-09-16
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 sp1234 的回复:]
就代码来说很简单

C# code
//从grd的第rowIndex行colIndex列单元格以下count行合并
public static void 合并行(this GridView grd, int rowIndex, int colIndex, int count)
{
grd.Rows[rowIndex].Cells[colIndex……
[/Quote]
学习了
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 jzf2050 的回复:]
光判断是否相同,就挺折腾人的。围观一下。。。。。。。
[/Quote]

判断是否相同,其实不用跟控件纠缠在一起。纠缠在一起,你明明不会判断数据中哪些相同,却硬要说成是控件不好用,那么就过分了。
  • 打赏
  • 举报
回复
就代码来说很简单
    //从grd的第rowIndex行colIndex列单元格以下count行合并
public static void 合并行(this GridView grd, int rowIndex, int colIndex, int count)
{
grd.Rows[rowIndex].Cells[colIndex].RowSpan = count;
for (var i = rowIndex + 1; i < rowIndex + count; i++)
grd.Rows[i].Cells[colIndex].Visible = false;
}

//从grd的第rowIndex行colIndex列单元格向右count列合并
public static void 合并列(this GridView grd, int rowIndex, int colIndex, int count)
{
grd.Rows[rowIndex].Cells[colIndex].ColumnSpan = count;
for (var i = 1; i < count; i++)
grd.Rows[rowIndex].Cells[colIndex + i].Visible = false;
}


关键是你要懂得如何扫面数据,来计算出那些单元格需要合并。先扫描,把结果记录下来,然后再调用这个方法。
cpp2017 2011-09-16
  • 打赏
  • 举报
回复
用repeater不嵌套也可以,
主要就是第一列的合并。



<tr>

<%#GetFirstTd(Container) %>

<td>...</td>

.....
</tr>



 string sLastName = string.Empty;
protected string GetFirstTd(RepeaterItem oItem)
{
string Name = ((DataRowView)oItem.DataItem)["课别"].ToString();
if (Name == sLastName) return string.Empty;
else
{
DataView dv = new DataView( ((DataRowView)oItem.DataItem).DataView.Table);
dv.RowFilter = "课别='"+Name+"'";
sLastName = Name;
return "<td rowspan ='" + dv.Count.ToString() + "'>" + Name + "</td>";
}
}
Lemon2050 2011-09-16
  • 打赏
  • 举报
回复
这得把gridview折腾成什么样啊,我看还是不要用gridview了,你自己设计个TABLE吧,那样可编程性强一点哦。

光判断是否相同,就挺折腾人的。围观一下。。。。。。。
暖枫无敌 2011-09-16
  • 打赏
  • 举报
回复
你有来了,上好几次你纠结怎么统计人数,现在有纠结显示样式了啊,呵呵。

你的这个可以通过Repeater嵌套就可以实现了。

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧