给你个列题参考:     private void initData() 
        { 
            Table gvt = new Table(); 
            gv.Attributes.Add( "ID", "gv" ); 
            gv.Controls.Add( gvt ); 
            string sXml = @"c:\\Sheet.xml"; 
            if( !System.IO.File.Exists( sXml ) ) 
                return; 
            System.Xml.XmlDocument xmlDoc = new System.Xml.XmlDocument(); 
            xmlDoc.Load( sXml ); 
            System.Xml.XmlNode node = xmlDoc.GetElementsByTagName( "Worksheet" ).Item( 0 ).ChildNodes[ 0 ]; 
            int iRows = node.ChildNodes.Count; 
            List <DataClass> list = new List <DataClass>(); 
            List <GridViewRow> headRows = new List <GridViewRow>(); 
            for( int i = 0; i < iRows; i++ ) 
            { 
                XmlNode xmlRow = node.ChildNodes[ i ]; 
                GridViewRow addHeaderRow = new GridViewRow( 0, 0, DataControlRowType.Header, DataControlRowState.Normal ); 
                int iColumns = xmlRow.ChildNodes.Count; 
                for( int j = 0; j < iColumns; j++ ) 
                { 
                    XmlNode xmlColumn = xmlRow.ChildNodes[ j ]; 
                    string sText = ""; 
                    sText = xmlColumn.InnerText; 
                    if( sText == "" ) 
                        sText = "&nbsp;"; 
                    int iRowSpan = 1; 
                    XmlAttribute xmlAttrRowSpan = xmlColumn.Attributes[ "ss:MergeDown" ]; 
                    if( xmlAttrRowSpan != null && !String.IsNullOrEmpty( xmlAttrRowSpan.Value ) ) 
                        iRowSpan = Convert.ToInt32( xmlAttrRowSpan.Value ) + 1;                     int iColumnSpan = 1; 
                    XmlAttribute xmlAttrColumnSpan = xmlColumn.Attributes[ "ss:MergeAcross" ]; 
                    if( xmlAttrColumnSpan != null && !String.IsNullOrEmpty( xmlAttrColumnSpan.Value ) ) 
                        iColumnSpan = Convert.ToInt32( xmlAttrColumnSpan.Value ) + 1;                     int iIndex = 0; 
                    XmlAttribute xmlAttrIndex = xmlColumn.Attributes[ "ss:Index" ]; 
                    if( xmlAttrIndex != null && !String.IsNullOrEmpty( xmlAttrIndex.Value ) ) 
                        iIndex = Convert.ToInt32( xmlAttrIndex.Value ); 
                    if( iIndex != 0 ) 
                    { 
                        int RowCellCount = addHeaderRow.Cells.Count; 
                        for( int k = 0; k < iIndex - RowCellCount; k++ ) 
                        { 
                            TableCell Cell = new TableCell(); 
                            Cell.Text = "&nbsp;"; 
                            Cell.Wrap = false; 
                            Cell.BorderColor = Color.Black; 
                            Cell.HorizontalAlign = HorizontalAlign.Center; 
                            addHeaderRow.Cells.Add( Cell ); 
                        } 
                        addHeaderRow.Cells[ iIndex - 1 ].Text = sText; 
                    } 
                    else 
                    { 
                        TableCell Cell = new TableCell(); 
                        Cell.Text = sText; 
                        //Cell.ColumnSpan = iColumnSpan; 
                        //Cell.RowSpan = iRowSpan; 
                        Cell.Wrap = false; 
                        Cell.BorderColor = Color.Black; 
                        Cell.HorizontalAlign = HorizontalAlign.Center; 
                        addHeaderRow.Cells.Add( Cell ); 
                    } 
                    DataClass test = new DataClass(); 
                    test.RowIndex = i; 
                    test.ColumnIndex = j; 
                    test.RowSpan = iRowSpan; 
                    test.ColumnSpan = iColumnSpan; 
                    list.Add( test ); 
                } 
                headRows.Add( addHeaderRow ); 
                
            } 
            foreach( DataClass data in list ) 
            { 
                headRows[ data.RowIndex ].Cells[ data.ColumnIndex ].RowSpan = data.RowSpan; 
                headRows[ data.RowIndex ].Cells[ data.ColumnIndex ].ColumnSpan = data.ColumnSpan; 
            } 
            foreach( GridViewRow row in headRows ) 
            { 
                this.gv.Controls[ 0 ].Controls.Add( row ); 
            } 
        } 
[Serializable] 
    public class DataClass 
    { 
        private int iColIndex = 0; 
        private int iRowIndex = 0; 
        private int iRowSpan = 1; 
        private int iCloSpan = 1; 
        public int ColumnIndex 
        { 
            set 
            { 
                iColIndex = value; 
            } 
            get 
            { 
                return iColIndex; 
            } 
        } 
        public int RowIndex 
        { 
            set 
            { 
                iRowIndex = value; 
            } 
            get 
            { 
                return iRowIndex; 
            } 
        } 
        public int RowSpan 
        { 
            set 
            { 
                iRowSpan = value; 
            } 
            get 
            { 
                return iRowSpan; 
            } 
        } 
        public int ColumnSpan 
        { 
            set 
            { 
                iCloSpan = value; 
            } 
            get 
            { 
                return iCloSpan; 
            } 
        } 
    }