在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;
            }

        }

        以上两种方法可合并使用  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值