关于repeater 合并部分行的问题 正常绑定后页面显示数据效果如: 姓名 科目 分数 张三 英语 100 李四 英语 100 张三 数学 100 李四 数学 100 李四 物理 100 但是现在想合并相同姓名行 页面显示预期效果如: 姓名 科目 分数 张三 英语 100 数学 100 李四 英语 100 数学 100 物理 100 对于这个各位有什么好滴实现方法呢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 repeater 合并不如GridView方便,网上有现成的例子 gridview合并代码:private 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; } } } } .aspx<asp:repeater id="repeaterMain" Runat="server" OnItemDataBound="repeaterMain_ItemDataBound"> <ItemTemplate> <table> <tr><td> <a href= " <%#"Details.aspx?au_id=" + DataBinder.Eval(Container,"DataItem.au_id")%> "> <%#DataBinder.Eval(Container,"DataItem.au_id")%> </a> 大类<br> </td> </tr> <asp:repeater ID="repeaterSub" Runat="server"> <ItemTemplate> <tr> <td> <a href= " <%#"Details.aspx?title_id=" + DataBinder.Eval(Container,"DataItem.title_id")%> "> <%#DataBinder.Eval(Container, "DataItem.title_id")%> </a> 小类 </td> </tr> </ItemTemplate> </asp:repeater> </table> </ItemTemplate> </asp:repeater>.csprotected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { BindMain(); } } private void BindMain() { SqlConnection cn = new SqlConnection(@"server=(local);uid=sa;pwd=1234567890;database=pubs"); SqlDataAdapter da = new SqlDataAdapter("select au_id from authors", cn); DataSet ds = new DataSet(); cn.Open(); da.Fill(ds); repeaterMain.DataSource = ds.Tables[0].DefaultView; repeaterMain.DataBind(); cn.Close(); } protected void repeaterMain_ItemDataBound(object sender, RepeaterItemEventArgs e) { if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) { string au_id = ((DataRowView)e.Item.DataItem).Row["au_id"].ToString(); Repeater repeaterSub = (Repeater)e.Item.FindControl("repeaterSub"); if (repeaterSub != null) { SqlConnection cn = new SqlConnection(@"server=(local);uid=sa;pwd=1234567890;database=pubs"); SqlCommand cmd = new SqlCommand("select title_id from titleauthor where au_id = @au_id", cn); cmd.Parameters.Add("@au_id", SqlDbType.VarChar, 11).Value = au_id; cn.Open(); repeaterSub.DataSource = cmd.ExecuteReader(); repeaterSub.DataBind(); cn.Close(); } } } 使用嵌套repeater 不行 很难控制对齐的问题 可以自己拼dataset.datatable的,实现效果如下:张三 英语 100 数学 100李四.... 你是说自己在后台拼接html 这是达到了需求 但是有没有更好滴办法呢 期待.............. 不如repeate 列表全部显示,有值就填充.没有值就null,还有你的表适当修改下 怎样将生成的多个excel文件保存到服务器端指定位置? 求教 星号* 怎样显示在中间哈 在.NET中 DataView分组问题 兼职asp高手,不是.net,是asp。活急,寻高手,待遇极优 新建xsd强类型数据集与access数据库的几个很菜的问题? 如何实现类似Form验证的效果,又不用受客户端是否禁用cookie的影响? 关于ASP.NET开发中的界面技术? 取用户控件属性的问题 asp.net集成开发的问题 web的和form的,哪个时效性好? asp.net怎么用代码修改flash中的图片
{
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;
}
}
}
}
<ItemTemplate>
<table>
<tr><td>
<a href= " <%#"Details.aspx?au_id=" + DataBinder.Eval(Container,"DataItem.au_id")%> "> <%#DataBinder.Eval(Container,"DataItem.au_id")%> </a> 大类<br>
</td>
</tr>
<asp:repeater ID="repeaterSub" Runat="server">
<ItemTemplate>
<tr>
<td>
<a href= " <%#"Details.aspx?title_id=" + DataBinder.Eval(Container,"DataItem.title_id")%> "> <%#DataBinder.Eval(Container, "DataItem.title_id")%> </a> 小类
</td>
</tr>
</ItemTemplate>
</asp:repeater>
</table>
</ItemTemplate>
</asp:repeater>.csprotected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
BindMain();
}
} private void BindMain()
{
SqlConnection cn = new SqlConnection(@"server=(local);uid=sa;pwd=1234567890;database=pubs");
SqlDataAdapter da = new SqlDataAdapter("select au_id from authors", cn);
DataSet ds = new DataSet();
cn.Open();
da.Fill(ds);
repeaterMain.DataSource = ds.Tables[0].DefaultView;
repeaterMain.DataBind();
cn.Close();
} protected void repeaterMain_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
string au_id = ((DataRowView)e.Item.DataItem).Row["au_id"].ToString();
Repeater repeaterSub = (Repeater)e.Item.FindControl("repeaterSub");
if (repeaterSub != null)
{
SqlConnection cn = new SqlConnection(@"server=(local);uid=sa;pwd=1234567890;database=pubs");
SqlCommand cmd = new SqlCommand("select title_id from titleauthor where au_id = @au_id", cn);
cmd.Parameters.Add("@au_id", SqlDbType.VarChar, 11).Value = au_id;
cn.Open();
repeaterSub.DataSource = cmd.ExecuteReader();
repeaterSub.DataBind();
cn.Close();
}
}
}
张三
英语 100
数学 100
李四
....