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

GridView内表格怎么合并,重分求教

2013-03-25 
GridView内表格如何合并,重分求教如图表1是正常GridView,表2是想要结果,表格的月份列,月份值为相同时表格

GridView内表格如何合并,重分求教
GridView内表格怎么合并,重分求教
如图表1是正常GridView,表2是想要结果,表格的月份列,月份值为相同时表格合并留一个
求指点GridView内表格怎么合并,重分求教GridView内表格怎么合并,重分求教GridView内表格怎么合并,重分求教GridView内表格怎么合并,重分求教GridView内表格怎么合并,重分求教GridView内表格怎么合并,重分求教GridView内表格怎么合并,重分求教GridView内表格怎么合并,重分求教GridView内表格怎么合并,重分求教

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Demo.aspx.cs" Inherits="WebApplication1.Demo" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Tim Demo 演示</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
<asp:GridView ID="GridView1" runat="server" 
onrowdatabound="GridView1_RowDataBound">
</asp:GridView>
    </div>
    </form>
</body>

</html>

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Drawing;

namespace WebApplication1
{
public partial class Demo : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
BindData();
}
}

void BindData()

var list = new List<Temp>
{
new Temp{ SiteName="千灯浦口",Time="2011-9-23",Function=Fun.自动值.ToString(), CODMn="4.10", TOC="6.83",pH="7.10"},
new Temp{ SiteName="千灯浦口",Time="2011-9-23",Function=Fun.手工值.ToString(), CODMn="4.2", TOC="6.34",pH="7.3"},
new Temp{ SiteName="千灯浦口",Time="2011-9-23",Function=Fun.偏差.ToString(), CODMn="-2.38%", TOC="7.73%",pH="-2.74%"},
new Temp{ SiteName="石浦大桥",Time="2011-9-23",Function=Fun.自动值.ToString(), CODMn="3.9", TOC="6.38",pH="7.18"},
new Temp{ SiteName="石浦大桥",Time="2011-9-23",Function=Fun.手工值.ToString(), CODMn="5.1", TOC="6.08",pH="6.99"},
new Temp{ SiteName="石浦大桥",Time="2011-9-23",Function=Fun.偏差.ToString(), CODMn="-23.53%", TOC="4.93%",pH="2.72%"},
new Temp{ SiteName="朱军港口",Time="2011-9-23",Function=Fun.自动值.ToString(), CODMn="3.30", TOC="6.43",pH="6.64"},
new Temp{ SiteName="朱军港口",Time="2011-9-23",Function=Fun.手工值.ToString(), CODMn="3.5", TOC="5.88",pH="7.02"},
new Temp{ SiteName="朱军港口",Time="2011-9-23",Function=Fun.偏差.ToString(), CODMn="-5.71%", TOC="9.35%",pH="-5.41%"}


};
GridView1.DataSource = list;
GridView1.DataBind();
}
enum Fun
{
自动值,
手工值,
偏差
};

string _tempvalue = "";
int _temprowspan = 1;
TableCell _temptablecell = null;
TableCell _temptablecell2 = null;

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow 
[解决办法]
 e.Row.RowType == DataControlRowType.Footer)
{
if (e.Row.Cells[0].Text == _tempvalue)
{
_temprowspan++;
e.Row.Cells.Remove(e.Row.Cells[0]);
e.Row.Cells.Remove(e.Row.Cells[0]);
}
else
{
if (_temprowspan != 1)
{
_temptablecell.RowSpan = _temprowspan;
_temptablecell2.RowSpan = _temprowspan;
}
_tempvalue = e.Row.Cells[0].Text;
_temptablecell = e.Row.Cells[0];
_temptablecell2 = e.Row.Cells[1];
_temprowspan = 1;
}
if (e.Row.Cells[3].Text == "7.3")
{
e.Row.Cells[3].BackColor = Color.Red;
}
}
}
}
class Temp
{
public string SiteName { get; set; }
public string Time { get; set; }
public string Function { get; set; }
public string CODMn { get; set; }
public string TOC { get; set; }
public string pH { get; set; }
}

}

 



[解决办法]
参考: my blog:
http://blog.csdn.net/q107770540/article/details/7010526
[解决办法]
不要用 asp:GridView?直接后台 生成html代码  前台输出  
[解决办法]
去百度一个gv合并通用类就好了
[解决办法]
参考http://www.cnblogs.com/scy251147/archive/2010/08/10/1796810.html
[解决办法]
GridView内表格怎么合并,重分求教
[解决办法]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI.WebControls;
using System.IO;
using System.Web.UI;
using System.Text;

namespace Echao.WebPage.Class
{
    /// <summary>
    /// 处理前台页面中GridView的合并及相关处理 xcmonline20120304
    /// </summary>
    public class ycGridView
    {
        /// <summary>
        /// 合并GridView中数据相同的行 只要有相同的都会合并 xcmonline20120308
        /// </summary>
        /// <param name="gridView"></param>
        public static void MergeRows(GridView gridView)


        {
            for (int rowIndex = gridView.Rows.Count - 2; rowIndex >= 0; rowIndex--)
            {
                GridViewRow row = gridView.Rows[rowIndex];
                GridViewRow previousRow = gridView.Rows[rowIndex + 1];

                for (int i = 0; i < row.Cells.Count; i++)
                {
                    if (row.Cells[i].Text == previousRow.Cells[i].Text)
                    {
                        row.Cells[i].RowSpan = previousRow.Cells[i].RowSpan < 2 ? 2 :
                                               previousRow.Cells[i].RowSpan + 1;
                        previousRow.Cells[i].Visible = false;
                    }
                }
            }
        }

        /// <summary>
        /// 合并GridView中数据指定列的相同行 xcmonline20120314
        /// </summary>
        /// <param name="gridView"></param>
        /// <param name="cellNum"></param>
        public static void GroupRows(GridView gridView, int cellNum)
        {
            try
            {
                int i = 0, rowSpanNum = 1;
                while (i < gridView.Rows.Count - 1)
                {
                    GridViewRow gvr = gridView.Rows[i];
                    for (++i; i < gridView.Rows.Count; i++)


                    {
                        GridViewRow gvrNext = gridView.Rows[i];
                        if (gvr.Cells[cellNum].Text == gvrNext.Cells[cellNum].Text)
                        {
                            gvrNext.Cells[cellNum].Visible = true;
                            rowSpanNum++;
                        }
                        else
                        {
                            gvr.Cells[cellNum].RowSpan = rowSpanNum;
                            rowSpanNum = 1;
                            break;
                        }

                        if (i == gridView.Rows.Count - 1)
                        {
                            gvr.Cells[cellNum].RowSpan = rowSpanNum;
                        }
                    }
                }
            }
            catch
            {
            }
        }


        #region 合并单元格 合并某一行的所有列
        ///  <summary>  
        ///  合并GridView中某行相同信息的行(单元格) 
        ///  </summary>  
        ///  <param  name="GridView1">GridView对象</param>  


        ///  <param  name="cellNum">需要合并的行</param> 
        public static void GroupRow(GridView gridView, int rows)
        {
            TableCell oldTc = gridView.Rows[rows].Cells[0];
            for (int i = 1; i < gridView.Rows[rows].Cells.Count; i++)
            {
                TableCell tc = gridView.Rows[rows].Cells[i];  //Cells[0]就是你要合并的列 
                if (oldTc.Text == tc.Text)
                {
                    tc.Visible = false;
                    if (oldTc.ColumnSpan == 0)
                    {
                        oldTc.ColumnSpan = 1;
                    }
                    oldTc.ColumnSpan++;
                    oldTc.VerticalAlign = VerticalAlign.Middle;
                }
                else
                {
                    oldTc = tc;
                }
            }
        }
        #endregion

        #region 合并单元格 合并一行中的几列
        /// <summary> 
        /// 合并单元格 合并一行中的几列 
        /// </summary> 
        /// <param name="gridView">GridView ID</param> 
        /// <param name="rows">行</param> 
        /// <param name="sCol">开始列</param> 
        /// <param name="eCol">结束列</param> 
        public static void GroupRow(GridView gridView, int rows, int sCol, int eCol)
        {
            TableCell oldTc = gridView.Rows[rows].Cells[sCol];


            for (int i = 1; i < eCol - sCol; i++)
            {
                TableCell tc = gridView.Rows[rows].Cells[i + sCol];  //Cells[0]就是你要合并的列 
                tc.Visible = false;
                if (oldTc.ColumnSpan == 0)
                {
                    oldTc.ColumnSpan = 1;
                }
                oldTc.ColumnSpan++;
                oldTc.VerticalAlign = VerticalAlign.Middle;
            }
        }
        #endregion

        #region 合并单元格 合并某一列所有行
        /// <summary> 
        /// 合并GridView中某列相同信息的行(单元格) 
        /// </summary> 
        /// <param name="gridView"></param> 
        /// <param name="cellNum"></param> 
        public static void GroupCol(GridView gridView, int cols)
        {
            if (gridView.Rows.Count < 1 
[解决办法]
 cols > gridView.Rows[0].Cells.Count - 1)
            {
                return;
            }
            TableCell oldTc = gridView.Rows[0].Cells[cols];
            for (int i = 1; i < gridView.Rows.Count; i++)
            {
                TableCell tc = gridView.Rows[i].Cells[cols];
                if (oldTc.Text == tc.Text)
                {
                    tc.Visible = false;
                    if (oldTc.RowSpan == 0)
                    {


                        oldTc.RowSpan = 1;
                    }
                    oldTc.RowSpan++;
                    oldTc.VerticalAlign = VerticalAlign.Middle;
                }
                else
                {
                    oldTc = tc;
                }
            }
        }
        #endregion
        #region 合并单元格 合并某一列中的某些行
        /// <summary> 
        /// 合并单元格 合并某一列中的某些行 
        /// </summary> 
        /// <param name="gridView">GridView ID</param> 
        /// <param name="cellNum">列</param> 
        /// <param name="sRow">开始行</param> 
        /// <param name="eRow">结束列</param> 
        public static void GroupCol(GridView gridView, int cols, int sRow, int eRow)
        {
            if (gridView.Rows.Count < 1 
[解决办法]
 cols > gridView.Columns.Count - 1)
            {
                return;
            }
            TableCell oldTc = gridView.Rows[sRow].Cells[cols];
            for (int i = 1; i < eRow - sRow; i++)
            {
                TableCell tc = gridView.Rows[sRow + i].Cells[cols];
                tc.Visible = false;
                if (oldTc.RowSpan == 0)
                {
                    oldTc.RowSpan = 1;


                }
                oldTc.RowSpan++;
                oldTc.VerticalAlign = VerticalAlign.Middle;
            }
        }
        #endregion

        /// <summary>
        /// 将gv导出为excel或word
        /// </summary>
        /// <param name="gvName">gv控件名称</param>
        /// <param name="contentType">导出格式Excel:application/ms-excel  Word:application/ms-word</param>
        /// <param name="fileName">导出名称</param>
        public static void ToExcelOrWord(Control gvName, string contentType, string fileName)
        {
            HttpContext.Current.Response.Clear();
            HttpContext.Current.Response.ClearContent();
            HttpContext.Current.Response.ClearHeaders();
            HttpContext.Current.Response.Buffer = true;
            HttpContext.Current.Response.Charset = "GB2312";
            HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpContext.Current.Server.UrlEncode(fileName));
            HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
            HttpContext.Current.Response.ContentType = contentType;

            gvName.Page.EnableViewState = false;
            System.Globalization.CultureInfo myCItrad = new System.Globalization.CultureInfo("ZH-CN", true);
            StringWriter stringWriter = new StringWriter(myCItrad);
            HtmlTextWriter htmlWriter = new HtmlTextWriter(stringWriter);

            gvName.RenderControl(htmlWriter);
            HttpContext.Current.Response.Output.Write(stringWriter.ToString());
            HttpContext.Current.Response.Flush();
            HttpContext.Current.Response.End();
        }

    }
}
[解决办法]


using System;
using System.Collections.Generic;


using System.Linq;
using System.Web;
using System.Web.UI.WebControls;
using System.IO;
using System.Web.UI;
using System.Text;

namespace Echao.WebPage.Class
{
    /// <summary>
    /// 处理前台页面中GridView的合并及相关处理 
    /// </summary>
    public class ycGridView
    {
        /// <summary>
        /// 合并GridView中数据相同的行 只要有相同的都会合并 
        /// </summary>
        /// <param name="gridView"></param>
        public static void MergeRows(GridView gridView)
        {
            for (int rowIndex = gridView.Rows.Count - 2; rowIndex >= 0; rowIndex--)
            {
                GridViewRow row = gridView.Rows[rowIndex];
                GridViewRow previousRow = gridView.Rows[rowIndex + 1];

                for (int i = 0; i < row.Cells.Count; i++)
                {
                    if (row.Cells[i].Text == previousRow.Cells[i].Text)
                    {
                        row.Cells[i].RowSpan = previousRow.Cells[i].RowSpan < 2 ? 2 :
                                               previousRow.Cells[i].RowSpan + 1;
                        previousRow.Cells[i].Visible = false;
                    }
                }
            }
        }

        /// <summary>
        /// 合并GridView中数据指定列的相同行
        /// </summary>
        /// <param name="gridView"></param>
        /// <param name="cellNum"></param>
        public static void GroupRows(GridView gridView, int cellNum)
        {


            try
            {
                int i = 0, rowSpanNum = 1;
                while (i < gridView.Rows.Count - 1)
                {
                    GridViewRow gvr = gridView.Rows[i];
                    for (++i; i < gridView.Rows.Count; i++)
                    {
                        GridViewRow gvrNext = gridView.Rows[i];
                        if (gvr.Cells[cellNum].Text == gvrNext.Cells[cellNum].Text)
                        {
                            gvrNext.Cells[cellNum].Visible = true;
                            rowSpanNum++;
                        }
                        else
                        {
                            gvr.Cells[cellNum].RowSpan = rowSpanNum;
                            rowSpanNum = 1;
                            break;
                        }

                        if (i == gridView.Rows.Count - 1)
                        {
                            gvr.Cells[cellNum].RowSpan = rowSpanNum;
                        }
                    }


                }
            }
            catch
            {
            }
        }


        #region 合并单元格 合并某一行的所有列
        ///  <summary>  
        ///  合并GridView中某行相同信息的行(单元格) 
        ///  </summary>  
        ///  <param  name="GridView1">GridView对象</param>  
        ///  <param  name="cellNum">需要合并的行</param> 
        public static void GroupRow(GridView gridView, int rows)
        {
            TableCell oldTc = gridView.Rows[rows].Cells[0];
            for (int i = 1; i < gridView.Rows[rows].Cells.Count; i++)
            {
                TableCell tc = gridView.Rows[rows].Cells[i];  //Cells[0]就是你要合并的列 
                if (oldTc.Text == tc.Text)
                {
                    tc.Visible = false;
                    if (oldTc.ColumnSpan == 0)
                    {
                        oldTc.ColumnSpan = 1;
                    }
                    oldTc.ColumnSpan++;
                    oldTc.VerticalAlign = VerticalAlign.Middle;
                }
                else
                {
                    oldTc = tc;
                }
            }
        }
        #endregion

        #region 合并单元格 合并一行中的几列


        /// <summary> 
        /// 合并单元格 合并一行中的几列 
        /// </summary> 
        /// <param name="gridView">GridView ID</param> 
        /// <param name="rows">行</param> 
        /// <param name="sCol">开始列</param> 
        /// <param name="eCol">结束列</param> 
        public static void GroupRow(GridView gridView, int rows, int sCol, int eCol)
        {
            TableCell oldTc = gridView.Rows[rows].Cells[sCol];
            for (int i = 1; i < eCol - sCol; i++)
            {
                TableCell tc = gridView.Rows[rows].Cells[i + sCol];  //Cells[0]就是你要合并的列 
                tc.Visible = false;
                if (oldTc.ColumnSpan == 0)
                {
                    oldTc.ColumnSpan = 1;
                }
                oldTc.ColumnSpan++;
                oldTc.VerticalAlign = VerticalAlign.Middle;
            }
        }
        #endregion

        #region 合并单元格 合并某一列所有行
        /// <summary> 
        /// 合并GridView中某列相同信息的行(单元格) 
        /// </summary> 
        /// <param name="gridView"></param> 
        /// <param name="cellNum"></param> 
        public static void GroupCol(GridView gridView, int cols)
        {
            if (gridView.Rows.Count < 1 
[解决办法]
 cols > gridView.Rows[0].Cells.Count - 1)
            {
                return;
            }
            TableCell oldTc = gridView.Rows[0].Cells[cols];


            for (int i = 1; i < gridView.Rows.Count; i++)
            {
                TableCell tc = gridView.Rows[i].Cells[cols];
                if (oldTc.Text == tc.Text)
                {
                    tc.Visible = false;
                    if (oldTc.RowSpan == 0)
                    {
                        oldTc.RowSpan = 1;
                    }
                    oldTc.RowSpan++;
                    oldTc.VerticalAlign = VerticalAlign.Middle;
                }
                else
                {
                    oldTc = tc;
                }
            }
        }
        #endregion
        #region 合并单元格 合并某一列中的某些行
        /// <summary> 
        /// 合并单元格 合并某一列中的某些行 
        /// </summary> 
        /// <param name="gridView">GridView ID</param> 
        /// <param name="cellNum">列</param> 
        /// <param name="sRow">开始行</param> 
        /// <param name="eRow">结束列</param> 
        public static void GroupCol(GridView gridView, int cols, int sRow, int eRow)
        {
            if (gridView.Rows.Count < 1 
[解决办法]
 cols > gridView.Columns.Count - 1)
            {
                return;
            }


            TableCell oldTc = gridView.Rows[sRow].Cells[cols];
            for (int i = 1; i < eRow - sRow; i++)
            {
                TableCell tc = gridView.Rows[sRow + i].Cells[cols];
                tc.Visible = false;
                if (oldTc.RowSpan == 0)
                {
                    oldTc.RowSpan = 1;
                }
                oldTc.RowSpan++;
                oldTc.VerticalAlign = VerticalAlign.Middle;
            }
        }
        #endregion

        /// <summary>
        /// 将gv导出为excel或word
        /// </summary>
        /// <param name="gvName">gv控件名称</param>
        /// <param name="contentType">导出格式Excel:application/ms-excel  Word:application/ms-word</param>
        /// <param name="fileName">导出名称</param>
        public static void ToExcelOrWord(Control gvName, string contentType, string fileName)
        {
            HttpContext.Current.Response.Clear();
            HttpContext.Current.Response.ClearContent();
            HttpContext.Current.Response.ClearHeaders();
            HttpContext.Current.Response.Buffer = true;
            HttpContext.Current.Response.Charset = "GB2312";
            HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpContext.Current.Server.UrlEncode(fileName));
            HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
            HttpContext.Current.Response.ContentType = contentType;

            gvName.Page.EnableViewState = false;
            System.Globalization.CultureInfo myCItrad = new System.Globalization.CultureInfo("ZH-CN", true);


            StringWriter stringWriter = new StringWriter(myCItrad);
            HtmlTextWriter htmlWriter = new HtmlTextWriter(stringWriter);

            gvName.RenderControl(htmlWriter);
            HttpContext.Current.Response.Output.Write(stringWriter.ToString());
            HttpContext.Current.Response.Flush();
            HttpContext.Current.Response.End();
        }

    }
}


[解决办法]
一楼的不错啊,我也试了试,lz解决没,GridView内表格怎么合并,重分求教

热点排行