在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
????????代??????? 碼:
????????????????
????????///?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;
????????????}
????????}
????????以上兩種方法可合并使用
轉載于:https://www.cnblogs.com/dsliang/archive/2010/07/01/1769201.html
總結
以上是生活随笔為你收集整理的在DataGrid中合并单元格行的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SharePoint 2010 中的BC
- 下一篇: 《划时代-51单片机C语言全新教程》-第