合并实现DataGrid多表头 (转自:http://singlepine.cnblogs.com/articles/282990.html)
来源:互联网 发布:mac怎么把word转成pdf 编辑:程序博客网 时间:2024/05/17 01:41
<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>
<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;
}
#endregion
property#region property
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);
}
}
#endregion
DatagridToDecorate_ItemCreated#region DatagridToDecorate_ItemCreated
private void DatagridToDecorate_ItemCreated(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
//*** Examine if the item created is the header item
ListItemType lit = e.Item.ItemType;
if(ListItemType.Header == lit)
{
//*** Redirect the default header rendering method to our own method
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");
//*** Add the style attributes that was defined in design time
// to our second row so they both will have the same appearance
m_dgDatagridToDecorate.HeaderStyle.AddAttributesToRender(writer);
//*** Insert the second row
writer.RenderBeginTag("TR");
//*** Render all the cells that was defined in design time, except the last one
// because we already rendered it above
for(int i=0; i< ctl.Controls.Count; i++)
{
if((null == m_htblRowspanIndex[i]))
{
ctl.Controls[i].RenderControl(writer);
}
}
//*** We don't need to write the </TR> close tag because the writer will do that for us
// and so we're done :)
}
#endregion
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;
}
#endregion
MergeGrid#region MergeGrid
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();
}
#endregion
Web Form Designer generated code#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: This call is required by the ASP.NET Web Form Designer.
//
InitializeComponent();
base.OnInit(e);
}
/**//// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
}
{
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;
}
#endregion
property#region property
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);
}
}
#endregion
DatagridToDecorate_ItemCreated#region DatagridToDecorate_ItemCreated
private void DatagridToDecorate_ItemCreated(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
//*** Examine if the item created is the header item
ListItemType lit = e.Item.ItemType;
if(ListItemType.Header == lit)
{
//*** Redirect the default header rendering method to our own method
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");
//*** Add the style attributes that was defined in design time
// to our second row so they both will have the same appearance
m_dgDatagridToDecorate.HeaderStyle.AddAttributesToRender(writer);
//*** Insert the second row
writer.RenderBeginTag("TR");
//*** Render all the cells that was defined in design time, except the last one
// because we already rendered it above
for(int i=0; i< ctl.Controls.Count; i++)
{
if((null == m_htblRowspanIndex[i]))
{
ctl.Controls[i].RenderControl(writer);
}
}
//*** We don't need to write the </TR> close tag because the writer will do that for us
// and so we're done :)
}
#endregion
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;
}
#endregion
MergeGrid#region MergeGrid
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();
}
#endregion
Web Form Designer generated code#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: This call is required by the ASP.NET Web Form Designer.
//
InitializeComponent();
base.OnInit(e);
}
/**//// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
}
- 合并实现DataGrid多表头 (转自:http://singlepine.cnblogs.com/articles/282990.html)
- 转自http://www.cnblogs.com/flashelf/articles/522348.html
- JavaScript this 关键字(转自http://www.cnblogs.com/yangjunwl/articles/1149869.html)
- http://www.cnblogs.com/singlepine/category/59670.html
- 今日插件的一个HELLO WORLD(转自http://www.cnblogs.com/freetofly/articles/1041549.html)
- 悲观锁和乐观锁 转自:http://www.cnblogs.com/ego/articles/1456317.html
- linux下的vi命令 转自http://www.cnblogs.com/88999660/articles/1581524.html
- Linux下的串口继续 转自http://www.cnblogs.com/jason-lu/articles/3173988.html
- asp.net 实现邮件群发类 轉自: http://www.cnblogs.com/Apex-yang/articles/679027.html
- jndi step by step(2)(转http://www.cnblogs.com/aurawing/articles/1887036.html)
- jndi step by step(2)(转http://www.cnblogs.com/aurawing/articles/1887036.html)
- jsp里动态生成XML,并绑定到页面表格 (转自http://www.cnblogs.com/huazi4995/articles/587059.html)
- 变体记录及存储方式(转载自 http://www.cnblogs.com/okwary/articles/1364018.html)
- 递归实现tree from http://www.cnblogs.com/wangsaokui/articles/9772.html
- C#实现SQL数据库备份与恢复(zzfrom:http://www.cnblogs.com/icwin/articles/1285657.html)
- STL(from:http://www.cnblogs.com/henryzc/articles/298882.html)
- http://www.cnblogs.com/caihongjin/articles/1296004.html
- http://www.cnblogs.com/yayagepei/articles/1285091.html
- 断点
- DOM 精简知识
- VB.NET编程中调用Windows API
- ADO Recordset对象的RecordCount属性总是-1?
- JPanel加载图像的过程
- 合并实现DataGrid多表头 (转自:http://singlepine.cnblogs.com/articles/282990.html)
- Access 2003:用150个范例学查询
- 服务器控制面板总集
- 生成直方图-通过观察直方图可帮助您了解数据的模式
- 认识ruby
- 简单高效:不重复随机读取数据库记录
- 关于web.xml配置的详细说明
- ASP的19个基本技巧
- 我国医疗分配公平性居世界倒数第四