GridView单元格合并操作类

来源:互联网 发布:ko是什么意思网络用语 编辑:程序博客网 时间:2024/05/15 06:13
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web.UI.WebControls;


namespace Tools
{
    /// <summary>
    /// <remarks>GridView单元格行列合并操作类</remarks>
    /// </summary>
    public class GridViewHelper:System.Web.UI.Page
    {
        /// <summary>
        /// GridView行合并
        /// </summary>
        /// <param name="gridView">GridView控件</param>
        /// <param name="colPos">行合并所在的列,从1开始</param>
        /// <param name="rowPosStart">行合并开始位置,从1开始</param>
        /// <param name="rowPosEnd">行合并结束位置,从1开始</param>
        public static void GridViewRowSpan(GridView gridView,int colPos,int rowPosStart,int rowPosEnd)
        {
            try
            {
                GridViewRowSpanCheck(gridView, colPos, rowPosStart, rowPosEnd, false);
            }
            catch (Exception ex)
            {
                throw ex;
            }
            int newColPos = colPos - 1;
            int newRowPosStart = rowPosStart - 1;
            int newRowPosEnd = rowPosEnd - 1;
            int rowSpanCount = newRowPosEnd - newRowPosStart + 1;
            TableCell startCell = gridView.Rows[newRowPosStart].Cells[newColPos];
            for (int i = newRowPosStart+1; i <= newRowPosEnd; i++)
            {
                gridView.Rows[i].Cells.RemoveAt(newColPos);
            }
            startCell.RowSpan = rowSpanCount;
        }


        /// <summary>
        /// GridView行合并
        /// </summary>
        /// <param name="gridView">GridView控件</param>
        /// <param name="colPos">行合并所在的列,从1开始</param>
        /// <param name="rowPosStart">行合并开始位置,从1开始</param>
        /// <param name="rowPosEnd">行合并结束位置,从1开始</param>
        /// <param name="isNeedCheckName">是否检测待合并的单元格名称是否一致</param>
        public static void GridViewRowSpan(GridView gridView, int colPos, int rowPosStart, int rowPosEnd, bool isNeedCheckName) 
        {
            try
            {
                GridViewRowSpanCheck(gridView, colPos, rowPosStart, rowPosEnd, isNeedCheckName);
            }
            catch (Exception ex)
            {
                throw ex;
            }
            GridViewRowSpan(gridView, colPos, rowPosStart, rowPosEnd);
        }


        /// <summary>
        /// GridView行合并检验
        /// </summary>
        /// <param name="gridView">GridView控件</param>
        /// <param name="colPos">行合并所在的列,从1开始</param>
        /// <param name="rowPosStart">行合并开始位置,从1开始</param>
        /// <param name="rowPosEnd">行合并结束位置,从1开始</param>
        /// <param name="isNeedCheckName">是否检测待合并的单元格名称是否一致</param>
        private static void GridViewRowSpanCheck(GridView gridView, int colPos, int rowPosStart, int rowPosEnd, bool isNeedCheckName)
        {
            if (gridView == null)
            {
                throw new Exception("待合并的GirdView不能为Null!");
            }
            if (gridView.Rows.Count <= 0)
            {
                throw new Exception("待合并的GridView行不能为空!");
            }
            if (colPos <= 0)
            {
                throw new Exception("行合并所在的列不能小于1!");
            }
            if (colPos > gridView.Rows.Count)
            {
                throw new Exception("合并的结束位置不能超过GriwView总行数!");
            }
            if (rowPosStart <= 0)
            {
                throw new Exception("合并开始位置不能小于1!");
            }
            if (rowPosEnd > gridView.Rows.Count)
            {
                throw new Exception("合并的结束位置不能超过GriwView总行数!");
            }
            if (rowPosStart == rowPosEnd)
            {
                throw new Exception("合并的开始位置和结束位置不能相同!");
            }
            if (rowPosStart > rowPosEnd)
            {
                throw new Exception("合并的开始位置不能大于合并的结束位置!");
            }
            if (isNeedCheckName)
            {
                int newColPos = colPos - 1;
                int newRowPosStart = rowPosStart - 1;
                int newRowPosEnd = rowPosEnd - 1;
                TableCell startCell = gridView.Rows[newRowPosStart].Cells[newColPos];
                for (int i = newRowPosStart; i <= newRowPosEnd; i++)
                {
                    TableCell curCell = gridView.Rows[i].Cells[newColPos];
                    if (startCell.Text != curCell.Text)
                    {
                        throw new Exception("需要进行合并的名称不一致");
                    }
                }
            }
        }


        /// <summary>
        /// GridView列合并
        /// </summary>
        /// <param name="gridView">GridView控件</param>
        /// <param name="rowPos">列合并所在的行,从1开始</param>
        /// <param name="colPosStart">列合并开始位置,从1开始</param>
        /// <param name="colPosEnd">列合并结束位置,从1开始</param>
        public static void GridViewColSpan(GridView gridView,int rowPos, int colPosStart, int colPosEnd)
        {
            try
            {
                GridViewColSpanCheck(gridView, rowPos, colPosStart, colPosEnd, false);
            }
            catch (Exception ex)
            {
                throw ex;
            }


            int newRowPos = rowPos - 1;
            int newColPosStart = colPosStart - 1;
            int newColPosEnd = colPosEnd - 1;
            int colSpanCount = newColPosEnd - newColPosStart + 1;
            TableCell startCell = gridView.Rows[newRowPos].Cells[newColPosStart];
            for (int i = newColPosStart + 1; i <= newColPosEnd; i++)
            {
                gridView.Rows[newRowPos].Cells.RemoveAt(newColPosStart+1);
            }
            startCell.ColumnSpan = colSpanCount;
        }


        /// <summary>
        /// GridView列合并
        /// </summary>
        /// <param name="gridView">GridView控件</param>
        /// <param name="rowPos">列合并所在的行,从1开始</param>
        /// <param name="colPosStart">列合并开始位置,从1开始</param>
        /// <param name="colPosEnd">列合并结束位置,从1开始</param>
        /// <param name="isNeedCheckName">是否检测待合并的单元格名称是否一致</param>
        public static void GridViewColSpan(GridView gridView, int rowPos, int colPosStart, int colPosEnd, bool isNeedCheckName)
        {
            try
            {
                GridViewColSpanCheck(gridView, rowPos, colPosStart, colPosEnd, isNeedCheckName);
            }
            catch (Exception ex)
            {
                throw ex;
            }
            GridViewColSpan(gridView, rowPos, colPosStart, colPosEnd);
        }


        /// <summary>
        /// GridView列合并检验
        /// </summary>
        /// <param name="gridView">GridView控件</param>
        /// <param name="rowPos">列合并所在的行,从1开始</param>
        /// <param name="colPosStart">列合并的开始位置,从1开始</param>
        /// <param name="colPosEnd">列合并的结束位置,从1开始</param>
        /// <param name="isNeedCheckName">是否检测待合并的单元格名称是否一致</param>
        private static void GridViewColSpanCheck(GridView gridView, int rowPos, int colPosStart, int colPosEnd, bool isNeedCheckName)
        { 
            if (gridView == null)
            {
                throw new Exception("待合并的GirdView不能为Null!");
            }
            if (gridView.Columns.Count <= 0)
            {
                throw new Exception("待合并的GridView列不能为空!");
            }
            if (rowPos <= 0)
            {
                throw new Exception("列合并的开始行位置不能小于1!");
            }
            if (rowPos > gridView.Rows.Count)
            {
                throw new Exception("列合并的开始行位置不能超过GriwView总行数!");
            }


            if (colPosStart <= 0)
            {
                throw new Exception("列合并的开始单元格位置不能小于1!");
            }
            if (colPosStart > gridView.Columns.Count)
            {
                throw new Exception("列合并的开始单元格位置不能超过GriwView总列数!");
            }


            if (colPosEnd <= 0)
            {
                throw new Exception("列合并的结束单元格位置不能小于1!");
            }
            if (colPosEnd > gridView.Columns.Count)
            {
                throw new Exception("列合并的结束单元格位置不能超过GriwView总列数!");
            }


            if (colPosStart == colPosEnd)
            {
                throw new Exception("合并的开始位置和结束位置不能相同!");
            }
            if (colPosStart > colPosEnd)
            {
                throw new Exception("合并的开始位置不能大于合并的结束位置!");
            }
            if (isNeedCheckName)
            {
                int newRowPos = rowPos - 1;
                int newColPosStart = colPosStart - 1;
                int newColPosEnd = colPosEnd - 1;
                TableCell startCell = gridView.Rows[newRowPos].Cells[newColPosStart];
                for (int i = newColPosStart; i <= newColPosEnd; i++)
                {
                    TableCell curCell = gridView.Rows[newRowPos].Cells[i];
                    if (startCell.Text != curCell.Text)
                    {
                        throw new Exception("需要进行合并的名称不一致");
                    }
                }
            }
        }


        /// <summary>
        /// GridView单元格合并
        /// </summary>
        /// <param name="gridView">GridView控件</param>
        /// <param name="left">单元格合并的左侧单元格,从1开始</param>
        /// <param name="right">单元格合并的右侧单元格,从1开始</param>
        /// <param name="top">单元格合并的顶部单元格,从1开始</param>
        /// <param name="bottom">单元格合并的底部单元格,从1开始</param>
        public static void GridViewCellSpan(GridView gridView, int left, int top, int right, int bottom)
        {
            try
            {
                GridViewCellSpanCheck(gridView, left, top, right, bottom);
            }
            catch (Exception ex)
            {
                throw ex;
            }


            for (int i = top; i <= bottom; i++)
            {
                GridViewColSpan(gridView, i, left, right);
            }
            GridViewRowSpan(gridView, left, top, bottom);
        }


        /// <summary>
        /// GridView单元格合并检验
        /// </summary>
        /// <param name="gridView">GridView控件</param>
        /// <param name="left">单元格合并的左侧单元格,从1开始</param>
        /// <param name="right">单元格合并的右侧单元格,从1开始</param>
        /// <param name="top">单元格合并的顶部单元格,从1开始</param>
        /// <param name="bottom">单元格合并的底部单元格,从1开始</param>
        private static void GridViewCellSpanCheck(GridView gridView, int left, int top, int right, int bottom)
        { 
            if (gridView == null)
            {
                throw new Exception("待合并的GirdView不能为Null!");
            }
            if (gridView.Columns.Count <= 0)
            {
                throw new Exception("待合并的GridView列不能为空!");
            }


            if (left <= 0)
            {
                throw new Exception("单元格合并的左侧位置不能小于1!");
            }
            if (left > gridView.Columns.Count)
            {
                throw new Exception("单元格合并的左侧位置不能大于GriwView总列数!");
            }
            if (left > gridView.Columns.Count)
            {
                throw new Exception("单元格合并的左侧位置不能大于GriwView总列数!");
            }
            if (right <= 0)
            {
                throw new Exception("单元格合并的右侧位置不能小于1!");
            }
            if (right > gridView.Columns.Count)
            {
                throw new Exception("单元格合并的右侧位置不能大于GriwView总列数!");
            }
            if (right > gridView.Columns.Count)
            {
                throw new Exception("单元格合并的右侧位置不能大于GriwView总列数!");
            }
            if (left == right)
            {
                throw new Exception("单元格合并的左侧位置和右侧位置不能相同!");
            }
            if (left > right)
            {
                throw new Exception("单元格合并的左侧位置不能大于右侧位置!");
            }


            if (top <= 0)
            {
                throw new Exception("单元格合并的顶部位置不能小于1!");
            }
            if (top > gridView.Rows.Count)
            {
                throw new Exception("单元格合并的顶部位置不能大于GriwView总行数!");
            }
            if (top > gridView.Rows.Count)
            {
                throw new Exception("单元格合并的顶部位置不能大于GriwView总行数!");
            }
            if (bottom <= 0)
            {
                throw new Exception("单元格合并的底部位置不能小于1!");
            }
            if (bottom > gridView.Rows.Count)
            {
                throw new Exception("单元格合并的底部位置不能大于GriwView总行数!");
            }
            if (bottom > gridView.Rows.Count)
            {
                throw new Exception("单元格合并的底部位置不能大于GriwView总行数!");
            }
            if (top == bottom)
            {
                throw new Exception("单元格合并的顶部位置和底部位置不能相同!");
            }
            if (top > bottom)
            {
                throw new Exception("单元格合并的顶部位置不能大于底部位置!");
            }
        }
    }
}
0 0
原创粉丝点击