Asp.Net下的DataGrid的多层表头详细些 Asp.Net下的DataGrid的多层表头详细设置过程,谢谢指教,谢谢了......... 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 <HTML> <HEAD> <title>MergeHeader</title> <meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1"> <meta name="CODE_LANGUAGE" Content="C#"> <meta name="vs_defaultClientScript" content="JavaScript"> <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5"> </HEAD> <body MS_POSITIONING="GridLayout"> <form id="Form1" method="post" runat="server"> <asp:datagrid id="DataGrid1" style="Z-INDEX: 101; LEFT: 8px; POSITION: absolute; TOP: 8px" runat="server" BorderColor="Tan" BorderWidth="1px" BackColor="LightGoldenrodYellow" CellPadding="1" ForeColor="Black" CellSpacing="1"> <FooterStyle BackColor="Tan"></FooterStyle> <SelectedItemStyle ForeColor="GhostWhite" BackColor="DarkSlateBlue"></SelectedItemStyle> <AlternatingItemStyle BackColor="PaleGoldenrod"></AlternatingItemStyle> <HeaderStyle Font-Bold="True" BackColor="Tan"></HeaderStyle> <PagerStyle HorizontalAlign="Center" ForeColor="DarkSlateBlue" BackColor="PaleGoldenrod"></PagerStyle> </asp:datagrid> </form> </body></HTML>public class MergeHeader : System.Web.UI.Page { private DataGrid m_dgDatagridToDecorate = null; private ArrayList m_arrHeaderCells = null; protected System.Web.UI.WebControls.DataGrid DataGrid1; private Hashtable m_htblRowspanIndex = new Hashtable(); private void Page_Load(object sender, System.EventArgs e) { if(!this.IsPostBack) { MergeGrid(); } } AddMergeHeader#region AddMergeHeader private void AddMergeHeader(ArrayList arrHeaderCells) { m_arrHeaderCells =arrHeaderCells; } private DataGrid DatagridToDecorate { get { return m_dgDatagridToDecorate; } set { if(null != m_dgDatagridToDecorate) { m_dgDatagridToDecorate.ItemCreated -= new DataGridItemEventHandler(DatagridToDecorate_ItemCreated); } m_dgDatagridToDecorate = value; m_dgDatagridToDecorate.ItemCreated += new DataGridItemEventHandler(DatagridToDecorate_ItemCreated); } } DatagridToDecorate_ItemCreated#region DatagridToDecorate_ItemCreated private void DatagridToDecorate_ItemCreated(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e) { ListItemType lit = e.Item.ItemType; if(ListItemType.Header == lit) { e.Item.SetRenderMethodDelegate(new RenderMethod(NewRenderMethod)); } } #endregion NewRenderMethod#region NewRenderMethod private void NewRenderMethod(HtmlTextWriter writer, Control ctl) { int iCurrIndex = 0; for(int i=0; i<m_arrHeaderCells.Count; i++) { TableCell item = (TableCell)m_arrHeaderCells[i]; if(item.ColumnSpan > 1) { iCurrIndex += item.ColumnSpan-1; } if(item.RowSpan > 1) { m_htblRowspanIndex.Add(iCurrIndex + i, iCurrIndex + i); } item.RenderControl(writer); } writer.WriteEndTag("TR"); m_dgDatagridToDecorate.HeaderStyle.AddAttributesToRender(writer); writer.RenderBeginTag("TR"); for(int i=0; i< ctl.Controls.Count; i++) { if((null == m_htblRowspanIndex[i])) { ctl.Controls[i].RenderControl(writer); } } } GetData#region GetData private DataTable GetData() { DataTable dt; dt = new DataTable(); dt.Columns.Add("Code"); dt.Columns.Add("FName"); dt.Columns.Add("MName"); dt.Columns.Add("LName"); dt.Columns.Add("Age"); dt.Columns.Add("Elementary"); dt.Columns.Add("Junior"); dt.Columns.Add("High"); dt.Columns.Add("Religion"); for(int i=1; i <= 12; i++) { DataRow dr = dt.NewRow(); dr["Code"] = "Code" + i.ToString(); dr["FName"] = "FName" + i.ToString(); dr["MName"] = "MName" + i.ToString(); dr["LName"] = "LName" + i.ToString(); dr["Age"] = "Age" + i.ToString(); dr["Elementary"] = "Elementary" + i.ToString(); dr["Junior"] = "Junior" + i.ToString(); dr["High"] = "High" + i.ToString(); dr["Religion"] = "Religion" + i.ToString(); dt.Rows.Add(dr); } return dt; } private void MergeGrid() { TableCell cell = null; DatagridToDecorate = DataGrid1; ArrayList header = new ArrayList(); cell = new TableCell(); cell.Text = "Name"; cell.RowSpan = 2; cell.HorizontalAlign = HorizontalAlign.Center; header.Add(cell); cell = new TableCell(); cell.Text = "Name"; cell.ColumnSpan = 3; cell.HorizontalAlign = HorizontalAlign.Center; header.Add(cell); cell = new TableCell(); cell.Text = "Age"; cell.RowSpan = 2; cell.HorizontalAlign = HorizontalAlign.Center; header.Add(cell); cell = new TableCell(); cell.Text = "School"; cell.ColumnSpan = 3; cell.HorizontalAlign = HorizontalAlign.Center; header.Add(cell); cell = new TableCell(); cell.Text = "Religion"; cell.RowSpan = 2; cell.HorizontalAlign = HorizontalAlign.Center; header.Add(cell); AddMergeHeader(header); DataGrid1.DataSource = GetData(); DataGrid1.DataBind(); } Web Form Designer generated code#region Web Form Designer generated code override protected void OnInit(EventArgs e) { InitializeComponent(); base.OnInit(e); } private void InitializeComponent() { this.Load += new System.EventHandler(this.Page_Load); } #endregion } 转自小山的bloghttp://singlepine.cnblogs.com/articles/282990.html 用LgxGrid就很简单了。————————————————————————————————————欢迎试用lgxgrid表格控件,内置强大的格式控制和打印功能,内置通过XML与WebService服务交换数据的便捷方法(开发基于B/S的WEB应用程序很有用),有详尽的中文帮助文档,有基于VB6、C#、ASP.net、VC++的例程!欢迎访问http://lgxyslldw.512j.com http://authors.aspalliance.com/aldotnet/examples/translate.aspx DataGrid显示双层表头假设你的DataGrid有三列,现在想将前两列作为"大类1",第三列作为"大类2",现在,你可以在ItemDataBound事件中加入下面的代码:if (e.Item.ItemType == ListItemType.Header){ e.Item.Cells[0].ColumnSpan = 2; e.Item.Cells[0].Text = "大类1</td><td>大类2</td></tr><tr><td>" + e.Item.Cells[0].Text;}用这个方法可以为任意添加新行。 高手们帮我分析分析。 ASP.NET grideview动态列的编辑问题 双网卡服务器如何切换IP ASP.NET有谁做过DataSet导出为记事本文件,给点意见!在线急等! 调用存储过程 请问一位这样的技术总监有多强,以及大概月工资有多少 sql 到 oracle 谁用Asp.net SmtpClient通过126.com等邮箱发信成功? 主域名和二级域名分别绑定不同的项目遇到的问题 新手请教:在C#ASP.NET中怎样连下一页 如何开发自定义控件!? ORACLE中不同表空间,不同用户之间如何导数?
<HEAD>
<title>MergeHeader</title>
<meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
<meta name="CODE_LANGUAGE" Content="C#">
<meta name="vs_defaultClientScript" content="JavaScript">
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
</HEAD>
<body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" runat="server">
<asp:datagrid id="DataGrid1" style="Z-INDEX: 101; LEFT: 8px; POSITION: absolute; TOP: 8px" runat="server"
BorderColor="Tan" BorderWidth="1px" BackColor="LightGoldenrodYellow" CellPadding="1" ForeColor="Black"
CellSpacing="1">
<FooterStyle BackColor="Tan"></FooterStyle>
<SelectedItemStyle ForeColor="GhostWhite" BackColor="DarkSlateBlue"></SelectedItemStyle>
<AlternatingItemStyle BackColor="PaleGoldenrod"></AlternatingItemStyle>
<HeaderStyle Font-Bold="True" BackColor="Tan"></HeaderStyle>
<PagerStyle HorizontalAlign="Center" ForeColor="DarkSlateBlue" BackColor="PaleGoldenrod"></PagerStyle>
</asp:datagrid>
</form>
</body>
</HTML>
public class MergeHeader : System.Web.UI.Page
{
private DataGrid m_dgDatagridToDecorate = null;
private ArrayList m_arrHeaderCells = null;
protected System.Web.UI.WebControls.DataGrid DataGrid1;
private Hashtable m_htblRowspanIndex = new Hashtable(); private void Page_Load(object sender, System.EventArgs e)
{
if(!this.IsPostBack)
{
MergeGrid();
}
} AddMergeHeader#region AddMergeHeader
private void AddMergeHeader(ArrayList arrHeaderCells)
{
m_arrHeaderCells =arrHeaderCells;
}
private DataGrid DatagridToDecorate
{
get
{
return m_dgDatagridToDecorate;
}
set
{
if(null != m_dgDatagridToDecorate)
{
m_dgDatagridToDecorate.ItemCreated -= new DataGridItemEventHandler(DatagridToDecorate_ItemCreated);
}
m_dgDatagridToDecorate = value;
m_dgDatagridToDecorate.ItemCreated += new DataGridItemEventHandler(DatagridToDecorate_ItemCreated);
}
}
DatagridToDecorate_ItemCreated#region DatagridToDecorate_ItemCreated
private void DatagridToDecorate_ItemCreated(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
ListItemType lit = e.Item.ItemType;
if(ListItemType.Header == lit)
{
e.Item.SetRenderMethodDelegate(new RenderMethod(NewRenderMethod));
}
}
#endregion NewRenderMethod#region NewRenderMethod
private void NewRenderMethod(HtmlTextWriter writer, Control ctl)
{
int iCurrIndex = 0;
for(int i=0; i<m_arrHeaderCells.Count; i++)
{
TableCell item = (TableCell)m_arrHeaderCells[i];
if(item.ColumnSpan > 1)
{
iCurrIndex += item.ColumnSpan-1;
}
if(item.RowSpan > 1)
{
m_htblRowspanIndex.Add(iCurrIndex + i, iCurrIndex + i);
}
item.RenderControl(writer);
}
writer.WriteEndTag("TR");
m_dgDatagridToDecorate.HeaderStyle.AddAttributesToRender(writer);
writer.RenderBeginTag("TR");
for(int i=0; i< ctl.Controls.Count; i++)
{
if((null == m_htblRowspanIndex[i]))
{
ctl.Controls[i].RenderControl(writer);
}
}
} GetData#region GetData
private DataTable GetData()
{
DataTable dt;
dt = new DataTable(); dt.Columns.Add("Code");
dt.Columns.Add("FName");
dt.Columns.Add("MName");
dt.Columns.Add("LName");
dt.Columns.Add("Age");
dt.Columns.Add("Elementary");
dt.Columns.Add("Junior");
dt.Columns.Add("High");
dt.Columns.Add("Religion"); for(int i=1; i <= 12; i++)
{
DataRow dr = dt.NewRow(); dr["Code"] = "Code" + i.ToString();
dr["FName"] = "FName" + i.ToString();
dr["MName"] = "MName" + i.ToString();
dr["LName"] = "LName" + i.ToString();
dr["Age"] = "Age" + i.ToString();
dr["Elementary"] = "Elementary" + i.ToString();
dr["Junior"] = "Junior" + i.ToString();
dr["High"] = "High" + i.ToString();
dr["Religion"] = "Religion" + i.ToString(); dt.Rows.Add(dr);
}
return dt;
}
private void MergeGrid()
{
TableCell cell = null; DatagridToDecorate = DataGrid1;
ArrayList header = new ArrayList(); cell = new TableCell();
cell.Text = "Name";
cell.RowSpan = 2;
cell.HorizontalAlign = HorizontalAlign.Center;
header.Add(cell); cell = new TableCell();
cell.Text = "Name";
cell.ColumnSpan = 3;
cell.HorizontalAlign = HorizontalAlign.Center;
header.Add(cell); cell = new TableCell();
cell.Text = "Age";
cell.RowSpan = 2;
cell.HorizontalAlign = HorizontalAlign.Center;
header.Add(cell); cell = new TableCell();
cell.Text = "School";
cell.ColumnSpan = 3;
cell.HorizontalAlign = HorizontalAlign.Center;
header.Add(cell); cell = new TableCell();
cell.Text = "Religion";
cell.RowSpan = 2;
cell.HorizontalAlign = HorizontalAlign.Center;
header.Add(cell); AddMergeHeader(header); DataGrid1.DataSource = GetData();
DataGrid1.DataBind();
}
Web Form Designer generated code#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
InitializeComponent();
base.OnInit(e);
}
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load); }
#endregion
}
http://singlepine.cnblogs.com/articles/282990.html
————————————————————————————————————
欢迎试用lgxgrid表格控件,内置强大的格式控制和打印功能,内置通过XML与WebService服务交换数据的便捷方法(开发基于B/S的WEB应用程序很有用),有详尽的中文帮助文档,有基于VB6、C#、ASP.net、VC++的例程!欢迎访问http://lgxyslldw.512j.com
假设你的DataGrid有三列,现在想将前两列作为"大类1",第三列作为"大类2",现在,你可以在ItemDataBound事件中加入下面的代码:
if (e.Item.ItemType == ListItemType.Header)
{
e.Item.Cells[0].ColumnSpan = 2;
e.Item.Cells[0].Text = "大类1</td><td>大类2</td></tr><tr><td>" + e.Item.Cells[0].Text;
}
用这个方法可以为任意添加新行。