第一种:
出处:http://hi.baidu.com/flc_709/blog/item/20976454869fd957574e0020.html
/// <summary>
/// 合并GridView中某列相同信息的行(单元格)
/// </summary>
/// <param name="GridView1">GridView</param>
/// <param name="cellNum">第几列</param>
public static void GroupRows(GridView GridView1, int cellNum)
{
int i = 0, rowSpanNum = 1;
while (i < GridView1.Rows.Count - 1)
{
GridViewRow gvr = GridView1.Rows[i];
for (++i; i < GridView1.Rows.Count; i++)
{
GridViewRow gvrNext = GridView1.Rows[i];
if (gvr.Cells[cellNum].Text == gvrNext.Cells[cellNum].Text)
{
gvrNext.Cells[cellNum].Visible = false;
rowSpanNum++;
}
else
{
gvr.Cells[cellNum].RowSpan = rowSpanNum;
rowSpanNum = 1;
break;
}
if (i == GridView1.Rows.Count - 1)
{
gvr.Cells[cellNum].RowSpan = rowSpanNum;
}
}
}
}
//正常换行
GVbkdj.Attributes.Add("style", "word-break:keep-all;word-wrap:normal");
//下面这行是自动换行
//GVbkdj.Attributes.Add("style", "word-break:break-all;word-wrap:break-word");
第二种方式:递归方式做成一个控件
public class GroupedGridView : GridView
{
public int GroupedDepth
{
get
{
object val = this.ViewState["GroupedDepth"];
if (null == val)
{
return 0;
}
return (int)val;
}
set
{
if (value < 0)
throw new ArgumentOutOfRangeException("value", "value must be greater than or equal to zero");
this.ViewState["GroupedDepth"] = value;
}
}
protected override void OnDataBound(EventArgs e)
{
base.OnDataBound(e);
this.SpanCellsRecursive(0, 0, this.Rows.Count);
}
private void SpanCellsRecursive(int columnIndex, int startRowIndex, int endRowIndex)
{
if (columnIndex >= this.GroupedDepth || columnIndex >= this.Columns.Count)
return;
TableCell groupStartCell = null;
int groupStartRowIndex = startRowIndex;
for (int i = startRowIndex; i < endRowIndex; i++)
{
TableCell currentCell = this.Rows[i].Cells[columnIndex];
bool isNewGroup = (null == groupStartCell) || (0 != String.CompareOrdinal(currentCell.Text, groupStartCell.Text));
if (isNewGroup)
{
if (null != groupStartCell)
{
SpanCellsRecursive(columnIndex + 1, groupStartRowIndex, i);
}
groupStartCell = currentCell;
groupStartCell.RowSpan = 1;
groupStartRowIndex = i;
}
else
{
currentCell.Visible = false;
groupStartCell.RowSpan += 1;
}
}
SpanCellsRecursive(columnIndex + 1, groupStartRowIndex, endRowIndex);
}
}