zoukankan      html  css  js  c++  java
  • 在DataGrid中合并单元格行

    最近在做项目的时候经常遇到要合并单元格的情况,发现这个东西.net中并没有现成的方法,研究了一下,总结了两种方法。
    这个主要都是行合并的,有以下两种情况
    1、多行合并为一行,其中将某个或某几个单元格的内容合并起来
         原始样式:
                column1     column2
                    1                    a
                    1                    b
                    1                    c
                    1                    d
                    2                    q
                    2                    w
                    2                    e
          需要效果:
                column1        column2
                    1                    a\b\c\d
                    2                    q\w\e
          代        码: 
                     

         
    private void DataGrid_CaseTeamList_Bind() 
            

                取得数据部分代码省略 
                dsSpeTeam 
    = o.GetData(strSQL).Tables[0].DefaultView; 
                DataSet dsSpeL 
    = o.GetData(strSQLSpe); 
                DataGrid_CaseTeamList.ItemCreated 
    +=new DataGridItemEventHandler(DataGrid_CaseTeamList_ItemCreated); 
                DataGrid_CaseTeamList.DataSource 
    = dsSpeL.Tables[0].DefaultView; 
                DataGrid_CaseTeamList.DataBind(); 
            }
     
     
            
    private void DataGrid_CaseTeamList_ItemCreated(object sender, DataGridItemEventArgs e) 
            

                DataGridItem item 
    = e.Item; 
                
    if (item.ItemType == ListItemType.Item || item.ItemType == ListItemType.AlternatingItem) 
                

                    DataRowView row 
    = (DataRowView)e.Item.DataItem; 
                    
    //set the filter condition 
                    string sSpecialist = row["column1"].ToString(); 
                    dsSpeTeam.RowFilter 
    = string.Format(" column1 = '{0}'", sSpecialist.Replace("'""''")); 
                     
                     
    //----------------------------------------------------------
                    
    // 若要将checkbox 合并放入,可使用下面代码 代替以下部分
                     
    //    CheckBoxList boxList = new CheckBoxList();
                    
    //    boxList.RepeatColumns  = 2;
                    
    //    boxList.RepeatDirection = RepeatDirection.Horizontal;
                    
    //    boxList.DataSource = dsSpeTeam;
                    
    //    boxList.DataTextField = "Team";
                    
    //    boxList.DataValueField = "Team";
                    
    //    PlaceHolder holder = (PlaceHolder) e.Item.FindControl("TeamArray");
                    
    //    holder.Controls.Add(boxList);
                    
    //----------------------------------------------------------
                     DataRowView row1 = null
                    IEnumerator Enum 
    = dsSpeTeam.GetEnumerator(); 
                    
    string strTeam= ""
                    
    while (Enum.MoveNext()) 
                    

                        row1 
    = (DataRowView) Enum.Current; 
                        strTeam 
    = strTeam + row1["column2"+ "/"
                    }
     
                    Label lbl 
    = new Label(); 
                    
    if (strTeam.Length > 0
                    

                        lbl.Text 
    = strTeam.Substring(0,strTeam.Length-1); 
                    }
     
                    
    else 
                    

                        lbl.Text 
    = " "
                    }
     
                    lbl.Style.Add(
    "padding-left","5px"); 
                    
    //在datagrid中,合并目标列放一个PlaceHolder控件 
                    
    //------------------------------------------------------------
                    PlaceHolder holder = (PlaceHolder) e.Item.FindControl("column2Value"); 
                    holder.Controls.Add(lbl); 
                }
     
            }
     

    2、将Datagrid中的某些相同的单元格合并
            原始样式:    
                    Column1            Column2
                        1                                a
                        1                                b
                        1                                c
                         2                                x
                         2                                y
                          2                               z
            需要效果:
                    Column1            Column2
                                                         a
                           1                            b
                                                         c
    _____________________________
                                                          x
                            2                            y
                                                           z

            代        码:
                    
            /// <summary>
            
    /// used to merge cells
            
    /// </summary>
            
    /// <param name="dg">datagrid will be merged</param>
            
    /// <param name="GroupColumn">merged column</param>
            
    /// <param name="compareColumn">basis column</param>

            private void spanRow(DataGrid dg,int GroupColumn,int compareColumn)
            
    {
                
    int i = 0;
                
    int j = 0;
                
    int rowSpan;
                
    string strTemp = "";
     
                
    for(i=0;i<dg.Items.Count;i++)
                
    {
                    rowSpan 
    = 1;
                    strTemp 
    = dg.Items[i].Cells[compareColumn].Text;
                    
    for (j=i+1;j<dg.Items.Count;j++)
                    
    {
                        
    if (string.Compare(strTemp,dg.Items[j].Cells[compareColumn].Text) == 0)
                        
    {
                            rowSpan 
    += 1;
                            dg.Items[i].Cells[GroupColumn].RowSpan 
    = rowSpan;
                            dg.Items[j].Cells[GroupColumn].Visible 
    = false;
                        }

                        
    else
                        
    {
                            
    break;
                        }

                    }

                    i 
    = j -1;
                }

            }

            以上两种方法可合并使用
            
               
  • 相关阅读:
    赫尔维茨公式
    从解析几何的角度分析二次型
    Struts 1 Struts 2
    记一次服务器被入侵的调查取证
    契约式设计 契约式编程 Design by contract
    lsblk df
    Linux Find Out Last System Reboot Time and Date Command 登录安全 开关机 记录 帐号审计 历史记录命令条数
    Infrastructure for container projects.
    更新文档 版本控制 多版本并发控制
    Building Microservices: Using an API Gateway
  • 原文地址:https://www.cnblogs.com/rickel/p/93419.html
Copyright © 2011-2022 走看看