在DataGrid中合并单元格行

时间:2022-02-23 09:31:38
最近在做项目的时候经常遇到要合并单元格的情况,发现这个东西.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
      代        码: 
                 
在DataGrid中合并单元格行
在DataGrid中合并单元格行     
private   void  DataGrid_CaseTeamList_Bind() 
在DataGrid中合并单元格行在DataGrid中合并单元格行        

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

在DataGrid中合并单元格行            DataGridItem item 
= e.Item; 
在DataGrid中合并单元格行            
if (item.ItemType == ListItemType.Item || item.ItemType == ListItemType.AlternatingItem) 
在DataGrid中合并单元格行在DataGrid中合并单元格行            

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

在DataGrid中合并单元格行                    row1 
= (DataRowView) Enum.Current; 
在DataGrid中合并单元格行                    strTeam 
= strTeam + row1["column2"+ "/"
在DataGrid中合并单元格行                }
 
在DataGrid中合并单元格行                Label lbl 
= new Label(); 
在DataGrid中合并单元格行                
if (strTeam.Length > 0
在DataGrid中合并单元格行在DataGrid中合并单元格行                

在DataGrid中合并单元格行                    lbl.Text 
= strTeam.Substring(0,strTeam.Length-1); 
在DataGrid中合并单元格行                }
 
在DataGrid中合并单元格行                
else 
在DataGrid中合并单元格行在DataGrid中合并单元格行                

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

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

        代        码:
                
在DataGrid中合并单元格行在DataGrid中合并单元格行         /// <summary>
在DataGrid中合并单元格行        
/// used to merge cells
在DataGrid中合并单元格行        
/// </summary>
在DataGrid中合并单元格行        
/// <param name="dg">datagrid will be merged</param>
在DataGrid中合并单元格行        
/// <param name="GroupColumn">merged column</param>
在DataGrid中合并单元格行        
/// <param name="compareColumn">basis column</param>

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

在DataGrid中合并单元格行                    
else
在DataGrid中合并单元格行在DataGrid中合并单元格行                    
{
在DataGrid中合并单元格行                        
break;
在DataGrid中合并单元格行                    }

在DataGrid中合并单元格行                }

在DataGrid中合并单元格行                i 
= j -1;
在DataGrid中合并单元格行            }

在DataGrid中合并单元格行        }

        以上两种方法可合并使用