代码如下:
CombinColumns
#region CombinColumns
private void CombinColumns(DataGrid dataGrid)
{
int rowsCount = dataGrid.Items.Count;
for (int i = rowsCount - 1; i > 0; i--)
{
int colCount = dataGrid.Items[0].Cells.Count;
for (int j = colCount - 1; j >= 0; j--)
{
int span = dataGrid.Items[i].Cells[j].RowSpan;
if (String.Equals(dataGrid.Items[i - 1].Cells[j].Text,dataGrid.Items[i].Cells[j].Text))
{
span = (span == 0 ? 1 : span);
span += 1;
dataGrid.Items[i - 1].Cells[j].RowSpan = span;
dataGrid.Items[i].Cells[j].Visible = false;
}
}
}
}
#endregion
private void CombinColumns(DataGrid dataGrid)
{
int rowsCount = dataGrid.Items.Count;
for (int i = rowsCount - 1; i > 0; i--)
{
int colCount = dataGrid.Items[0].Cells.Count;
for (int j = colCount - 1; j >= 0; j--)
{
int span = dataGrid.Items[i].Cells[j].RowSpan;
if (String.Equals(dataGrid.Items[i - 1].Cells[j].Text,dataGrid.Items[i].Cells[j].Text))
{
span = (span == 0 ? 1 : span);
span += 1;
dataGrid.Items[i - 1].Cells[j].RowSpan = span;
dataGrid.Items[i].Cells[j].Visible = false;
}
}
}
}
#endregion
次代码有以下缺点:1.单元格内容不能为模板列;
下面是转借别人的:
/**/
/// <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;
}
}
/// 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;
}
}