今天又在研究GridView想實現合并相同儲存格
後來就找了點網上例子,搜gridview通用大全,或者gridview使用大全都可以搜到
我主要用看的這個人例子http://www.cnblogs.com/huangjianhuakarl/
稍加改動,實現了自己功能,好了可以看原始碼了
using System;using System.Data;using System.Configuration;using System.Collections;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Web.UI.HtmlControls;/// <summary>/// Author:原作者匆匆 Blog:http://www.cnblogs.com/huangjianhuakarl/ 改動xy/// </summary>public partial class 表頭表尾_GridviewDelSameCell : System.Web.UI.Page{ protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { bind(); } } /// <summary> /// 綁定資料 /// </summary> public void bind() { string sqlStr = "select * from Employee"; DataSet myds = Common.dataSet(sqlStr); GridView1.DataSource = myds; GridView1.DataKeyNames = new string[] { "ID" }; GridView1.DataBind(); gvRender(); } /// <summary> /// 在 GridView 控制項中建立新行時發生,此事件通常用於在建立某個行時修改該行的布局或外觀 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e) { switch (e.Row.RowType) { //判斷是否表頭 case DataControlRowType.Header: //第一行表頭 TableCellCollection tcHeader = e.Row.Cells; tcHeader.Clear(); tcHeader.Add(new TableHeaderCell()); tcHeader[0].Attributes.Add("rowspan", "2"); tcHeader[0].Attributes.Add("bgcolor", "Azure"); tcHeader[0].Text = "編號"; tcHeader.Add(new TableHeaderCell()); tcHeader[1].Attributes.Add("colspan", "6"); tcHeader[1].Attributes.Add("bgcolor", "Azure"); tcHeader[1].Text = "基 本 信 息"; tcHeader.Add(new TableHeaderCell()); tcHeader[2].Attributes.Add("bgcolor", "Azure"); tcHeader[2].Text = "福利</th></tr><tr>"; //第二行表頭 tcHeader.Add(new TableHeaderCell()); tcHeader[3].Attributes.Add("bgcolor", "Azure"); tcHeader[3].Text = "帳號"; tcHeader.Add(new TableHeaderCell()); tcHeader[4].Attributes.Add("bgcolor", "Azure"); tcHeader[4].Text = "姓名"; tcHeader.Add(new TableHeaderCell()); tcHeader[5].Attributes.Add("bgcolor", "Azure"); tcHeader[5].Text = "性別"; tcHeader.Add(new TableHeaderCell()); tcHeader[6].Attributes.Add("bgcolor", "Azure"); tcHeader[6].Text = "住址"; tcHeader.Add(new TableHeaderCell()); tcHeader[7].Attributes.Add("bgcolor", "Azure"); tcHeader[7].Text = "郵編"; tcHeader.Add(new TableHeaderCell()); tcHeader[8].Attributes.Add("bgcolor", "Azure"); tcHeader[8].Text = "生日"; tcHeader.Add(new TableHeaderCell()); tcHeader[9].Attributes.Add("bgcolor", "Azure"); tcHeader[9].Text = "月薪"; break; } } /// <summary> /// 在 GridView 控制項中的某個行被綁定到一個資料記錄時發生。此事件通常用於在某個行被綁定到資料時修改該行的內容。 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) { foreach (TableCell tc in e.Row.Cells) { tc.Attributes["style"] = "border-color:Black"; } if (e.Row.RowIndex != -1) { int id = GridView1.PageIndex * GridView1.PageSize + e.Row.RowIndex + 1; e.Row.Cells[0].Text = id.ToString(); } } /// <summary> /// 合并一列中的相同項 /// </summary> private void gvRender() { if (GridView1.Rows.Count <= 1) { return; } for (int i = 0; i < GridView1.Columns.Count; i++) { TableCell oldtc = GridView1.Rows[0].Cells[i]; for (int j = 1; j < GridView1.Rows.Count; j++) { TableCell newtc = GridView1.Rows[j].Cells[i]; //如果相等合并,否則替換比較對象 if (newtc.Text == oldtc.Text) { newtc.Visible = false; if (oldtc.RowSpan == 0) { oldtc.RowSpan = 1; oldtc.RowSpan = oldtc.RowSpan + 1; oldtc.VerticalAlign = VerticalAlign.Middle; } else { oldtc.RowSpan = oldtc.RowSpan + 1; oldtc.VerticalAlign = VerticalAlign.Middle; } } else { oldtc = newtc; } } } }}
原表:
運行結果