zoukankan      html  css  js  c++  java
  • Datagrid中隐藏、合并相同文字列



            /// <summary>
            
    /// 方法编号:06
            
    /// 方法名称:CombineRepeatedCell
            
    /// 内容摘要:文字相同的列的合并
            
    /// 算法思路:将相同的连续单元格想象成“块”,将"块"放置在数据容器中,全部遍历相加需合并的单元格的rowspan,来进行合并隐藏的动作
            
    /// </summary>
            
    /// <param name="m_arrIndex">需要合并的列的index数据</param>

            public void CombineRepeatedCell(DataGrid m_grid,int[] m_arrIndex)
            
    {
                
    foreach (int m_colIndex in m_arrIndex) //
                {
                    ArrayList m_hidCells 
    = new ArrayList();

                    
    //得到需合并的item
                    for (int i = 0; i < m_grid.Items.Count; i++)
                    
    {
                        
    //第一行不用比较,并终止比较于最后一行
                        if (i == 0 || i == (m_grid.PageSize * m_grid.CurrentPageIndex)) 
                        
    {
                            m_hidCells.Add(m_grid.Items[i].Cells[m_colIndex]);
                            
    continue;
                        }

                        
    //文字相同时
                        if (string.Compare(m_grid.Items[i].Cells[m_colIndex].Text,m_grid.Items[i - 1].Cells[m_colIndex].Text) == 0)
                        
    {
                            m_hidCells.Add(m_grid.Items[i].Cells[m_colIndex]);
                        }


                        
    //文字不同,或文字相同但已到最后一行
                        if (m_grid.Items[i].Cells[m_colIndex].Text != m_grid.Items[i - 1].Cells[m_colIndex].Text
                            
    || i == m_grid.Items.Count - 1)
                        
    {
                            
    //一旦发现有不同的文字,即表示单元格块的结束
                            if (m_hidCells.Count <= 0//无需合并
                            {
                                
    return
                            }

                            
    int m_iRowspan = 0//待合并的单元格的Rowspan
                            foreach (TableCell c in m_hidCells)
                            
    {
                                m_iRowspan 
    += (c.RowSpan > 0? c.RowSpan : 1;
                            }

                            
    for (int ii = 1; ii <= m_hidCells.Count - 1; ii++)
                            
    {
                                ((TableCell)m_hidCells[ii]).Visible 
    = false;
                            }

                            ((TableCell)m_hidCells[
    0]).RowSpan = m_iRowspan;

                            
    //开始制作新的容器
                            m_hidCells = new ArrayList();
                            m_hidCells.Add(m_grid.Items[i].Cells[m_colIndex]);
                            
    continue;
                        }
    //for 结束
                    }
    //foreach 结束
                }
    //foreach (int i in m_arrIndex) 结束
            }
    //CombineRepeatedCell 结束

            
    /// <summary>
            
    /// 方法编号:03
            
    /// 方法名称:HideRepeatedCell
            
    /// 内容摘要:文字相同的列的隐藏
            
    /// 算法思路:不能在循环ITEM的时候进行合并或隐藏,以免比较出现错误
            
    ///           只能暂先放置在容器中,全部遍历方进行合并隐藏的动作 
            
    /// </summary>
            
    /// <param name="m_grid"></param>
            
    /// <param name="m_arrIndex">需要隐藏的列的index数据</param>

            public void HideRepeatedCell(DataGrid m_grid,int[] m_arrIndex)
            
    {
                
    if (m_arrIndex.Length <= 0)//检查特异情况
                {
                    
    return;
                }

                
    //处理重复时隐藏
                ArrayList m_hidCells = new ArrayList();


                
    //得到需隐藏的item
                foreach (DataGridItem item in m_grid.Items)
                
    {
                    
    if (item.ItemType == ListItemType.Item || item.ItemType == ListItemType.AlternatingItem)
                    
    {
                        
    //如果为第一行,且跳过
                        
                        
    if (item.ItemIndex == 0 || item.ItemIndex == (m_grid.PageSize * m_grid.CurrentPageIndex)) 
                        
    {
                            
    continue;
                        }


                        
    foreach (int m_colIndex in m_arrIndex)
                        
    {
                            
    if (item.Cells[m_colIndex].Text == m_grid.Items[item.ItemIndex - 1].Cells[m_colIndex].Text)
                            
    {
                                m_hidCells.Add(item.Cells[m_colIndex]);
                            }

                            
    else
                            
    {
                                
    break;
                            }
     
                        }

                    }
    //if (item.ItemType == ListItemType.Item 结束
                }
    //foreach (DataGridItem item in m_grid.Items) 结束

                
    //开始隐藏
                foreach (object obj in m_hidCells)
                
    {
                    ((TableCell)obj).Text 
    = string.Empty;
                }

            }
    //HideRepeatedCell 结束
  • 相关阅读:
    jQuery实现仿微博发布框字数提示
    jQuery实现滚动公告练习
    jQuery实现页面搜索
    jQuery某网站品牌列表效果
    [转]windows中断与共享的连接(samba)
    rpm --rebuilddb
    【转】一个 Linux 上分析死锁的简单方法
    取消脚本进程之——后台进程
    whoami与who am i
    linux启动执行某个脚本
  • 原文地址:https://www.cnblogs.com/syveen/p/231763.html
Copyright © 2011-2022 走看看