none
asp.net Table 复杂单元格合并问题 急急急!!! RRS feed

  • 问题

  • 有一个这样的表格,我想通过TableCell的RowSpan和ColSpan属性将表格做成,也就是第一列:行内容相同的进行合并,第二列、第三列:行相同的合并,列相同的合并

    要怎么合并啊,我的行合并代码:

    /// <summary>
            /// 合并单元格
            /// </summary>
            /// <param name="table">要处理的表格名称</param>
            /// <param name="col">处理第几列单元格</param>
            /// <param name="startRow">从第几行开始处理</param>
    private void ColMerge(ref Table table, int col, int startRow)
            {
                int rowsCount = table.Rows.Count;
                if (startRow >= rowsCount) return; // 超界返回
                int rSpan = 0; //单元格跨越的行数
                int s = startRow; //起始行
                string text1 = table.Rows[startRow].Cells[col].Text;
                for (int r = startRow; r < rowsCount; r++)
                {
                    string text2 = GetCellByID(table.Rows[r], col).Text;
                    if (text1.Equals(text2))
                    {
                        rSpan++;
                        TableCell cell1 = GetCellByID(table.Rows[r], col);
                        if (r != s)
                        {
                            table.Rows[r].Cells.Remove(cell1); //移除
                        }
                    }
                    else
                    {
                        //GetCellByID(table.Rows[s], col).Attributes["border"] = "1px";
                        GetCellByID(table.Rows[s], col).RowSpan = rSpan;
                        rSpan = 0;
                        s = r--;
                        text1 = text2;
                    }
                }
                GetCellByID(table.Rows[s], col).RowSpan = rSpan;
            }

    列的合并代码:

    /// <summary>
            /// 合并单元格
            /// </summary>
            /// <param name="table">单元格所在的表</param>
            /// <param name="startRow">从第几行开始合并</param>
            /// <param name="col">从第几列开始算</param>
            /// <returns></returns>
            protected void CombineCell(ref Table table, int startRow)
            {
                int rowNum = table.Rows.Count;
                for (int i = startRow; i < rowNum; i++)
                {
                    TableCell cell1 = GetCellByID(table.Rows[i], 1);
                    TableCell cell2 = GetCellByID(table.Rows[i], 2);
                    if (cell1.Text.Trim() == cell2.Text.Trim())
                    {
                        table.Rows[i].Cells.Remove(cell2);
                        cell1.ColumnSpan = 2;
                    }
                }
            }  

    当调用两次列的合并代码后,第二列的没有合并,但是在第三列上合并了,好奇怪啊

        ColMerge(ref tblViewAppraisal, 0, 0);
        ColMerge(ref tblViewAppraisal, 1, 0);

    哪位大侠能帮帮忙啊,好急,不胜感激啊

    2012年3月29日 2:57

答案

  • 你好,

    你可以设置一个断点,一步一步debug下看看哪里出问题和你预想的不一样,有问题再发出来。


    Please mark the replies as answers if they help or unmark if not.
    If you have any feedback about my replies, please contact msdnmg@microsoft.com
    Microsoft One Code Framework

    2012年3月30日 7:30
    版主
  • 谢谢你的回复,现在已经知道问题所在了,在合并单元格的时候,我们认为的第二列其实已经变成了第一列,所以才会出现上面那样的结果,查看网页源代码就知道啦,其实还是微软把table封装了,不知道TableCell是怎么出来的,也不知道rowspan属性和colspan属性到底是怎么合并的,才会费了好长时间也找不到问题所在
    • 已标记为答案 占占wyz 2012年4月5日 6:02
    2012年3月31日 10:43

全部回复

  • 补充一个下:当调用两次后的单元格变成:

    完全跟先合并第一列,再合并第二列的初衷不一样

    2012年3月29日 3:07
  • 你好,

    你可以设置一个断点,一步一步debug下看看哪里出问题和你预想的不一样,有问题再发出来。


    Please mark the replies as answers if they help or unmark if not.
    If you have any feedback about my replies, please contact msdnmg@microsoft.com
    Microsoft One Code Framework

    2012年3月30日 7:30
    版主
  • 谢谢你的回复,现在已经知道问题所在了,在合并单元格的时候,我们认为的第二列其实已经变成了第一列,所以才会出现上面那样的结果,查看网页源代码就知道啦,其实还是微软把table封装了,不知道TableCell是怎么出来的,也不知道rowspan属性和colspan属性到底是怎么合并的,才会费了好长时间也找不到问题所在
    • 已标记为答案 占占wyz 2012年4月5日 6:02
    2012年3月31日 10:43