Asp.Net下的DataGrid的多层表头详细设置过程,谢谢指教,谢谢了.........

解决方案 »

  1.   

    <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        
        }
      

  2.   

    转自小山的blog
    http://singlepine.cnblogs.com/articles/282990.html
      

  3.   

    用LgxGrid就很简单了。
    ————————————————————————————————————
    欢迎试用lgxgrid表格控件,内置强大的格式控制和打印功能,内置通过XML与WebService服务交换数据的便捷方法(开发基于B/S的WEB应用程序很有用),有详尽的中文帮助文档,有基于VB6、C#、ASP.net、VC++的例程!欢迎访问http://lgxyslldw.512j.com
      

  4.   

    http://authors.aspalliance.com/aldotnet/examples/translate.aspx
      

  5.   

    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;
    }
    用这个方法可以为任意添加新行。