62,074
社区成员
发帖
与我相关
我的任务
分享
protected void GridView1_DataBound(object sender, EventArgs e)
{
int row = 0;
for (int i = 1; i < GridView1.Rows.Count; i++)
{
if (GridView1.Rows[i].Cells[0].Text == GridView1.Rows[i - 1].Cells[0].Text) {
if (GridView1.Rows[row].Cells[1].RowSpan == 0)
{
GridView1.Rows[row].Cells[0].RowSpan++;
}
GridView1.Rows[row].Cells[0].RowSpan++;
GridView1.Rows[i].Cells[0].Visible = false;
}
else
{
row = i;
}
}
这个是用vs2003的时候写的,现在第三方控件里就有属性合并同样的行了,gridview就没写对应的,你可以把下面的DataGrid1.Items都换成Gridview.Rows用,
private void SpanGrid()
{
int j=DataGrid1.Items.Count;//行数
int u;//自循环所用参数
for (int i = 0;i<j;i++)
{
int inRowSpan = 1;//跨行数
string ItmStr = DataGrid1.Items[i].Cells[0].Text.ToString();
for(u = i+1;u<j;u++)
{
if (ItmStr.Equals(DataGrid1.Items[u].Cells[0].Text.ToString()))
{
inRowSpan += 1;
DataGrid1.Items[i].Cells[0].RowSpan = inRowSpan;//对最歪层所循环行赋要跨行数
DataGrid1.Items[u].Cells[0].Visible = false;//当前被跨行不可见
}
else
{
break;
}
}
i = u - 1;
}
}
int row = 0;
for (int i = 1; i < GridView1.Rows.Count; i++)
{
if (GridView1.Rows[i].Cells[0].Text == GridView1.Rows[i - 1].Cells[0].Text) {
GridView1.Rows[row].Cells[0].RowSpan++;
GridView1.Rows[i].Cells[0].Visible = false;
}
else
{
GridView1.Rows[row].Cells[0].RowSpan++;
row = i;
}
}
GridView1.Rows[row].Cells[0].RowSpan++;
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<asp:GridView ID="gv" runat="server" onprerender="gv_PreRender"></asp:GridView>
</form>
</body>
</html>
int mergeCount = 2; //前两列合并
private DataTable GetDataTable()
{
DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("ID", typeof(Int32)));
dt.Columns.Add(new DataColumn("Name", typeof(String)));
dt.Columns.Add(new DataColumn("Sex", typeof(String)));
DataRow dr = dt.NewRow();
dr[0] = 1;
dr[1] = "0101";
dr[2] = "男";
dt.Rows.Add(dr);
dr = dt.NewRow();
dr[0] = 1;
dr[1] = "0101";
dr[2] = "男";
dt.Rows.Add(dr);
dr = dt.NewRow();
dr[0] = 1;
dr[1] = "01011";
dr[2] = "女";
dt.Rows.Add(dr);
dr = dt.NewRow();
dr[0] = 2;
dr[1] = "01";
dr[2] = "男";
dt.Rows.Add(dr);
dr = dt.NewRow();
dr[0] = 2;
dr[1] = "01001";
dr[2] = "女";
dt.Rows.Add(dr);
dr = dt.NewRow();
dr[0] = 3;
dr[1] = "01001";
dr[2] = "女";
dt.Rows.Add(dr);
return dt;
}
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
gv.DataSource = GetDataTable();
gv.DataBind();
}
}
protected void gv_PreRender(object sender, EventArgs e)
{
for (int rowIndex = gv.Rows.Count - 2; rowIndex >= 0; rowIndex--)
{
GridViewRow row = gv.Rows[rowIndex];
GridViewRow previousRow = gv.Rows[rowIndex + 1];
for (int i = 0; i < row.Cells.Count && i < mergeCount; i++)
{
if (row.Cells[i].Text == previousRow.Cells[i].Text)
{
row.Cells[i].RowSpan = previousRow.Cells[i].RowSpan < 2 ? 2 :
previousRow.Cells[i].RowSpan + 1;
previousRow.Cells[i].Visible = false;
}
}
}
}