首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

gridview合拢列

2013-01-21 
gridview合并列合并这个合并了很久了,在网上也找了很多代码看,还是实现不了我想要的效果。请各位大侠帮我看

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

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

gridview
gridview合拢列

excel:
gridview合拢列
[解决办法]
你有来了,上好几次你纠结怎么统计人数,现在有纠结显示样式了啊,呵呵。

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


[解决办法]
用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>";
            }
        }

[解决办法]
就代码来说很简单
    //从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;
    }



关键是你要懂得如何扫面数据,来计算出那些单元格需要合并。先扫描,把结果记录下来,然后再调用这个方法。
[解决办法]
何不这么麻烦,后台只需要负责数据传输就行了,至于格式和样式完全由前台控制好了。比如你传回来的是一个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>


[解决办法]
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的。
[解决办法]
我是觉得这种表格用GridView不太方便。我一般都是在后台写html的table的。像下面这种gridview合拢列
gridview合拢列前面单元格占的行根据后面单元格来确定的话,用GridView的效率并不怎么好。
[解决办法]
有时间研究研究用html的表格显示
[解决办法]
http://blog.csdn.net/21aspnet/article/details/1540301
看看他的博客gridview72般绝技,它里面讲的有合并表头,是3行3列.

热点排行