废话不多说,先上效果图。
为了达到这样的显示效果, 同时为了后台修改后,前台也直接修改的效果。用了repeater嵌套。
前台代码:
<asp:Repeater ID="Rep_StreetName" runat="server" >
<ItemTemplate>
<asp:Label ID="LID" Text='<%# Eval("StreetNo")%>' runat="server" Visible="false"></asp:Label>
<div class="<%# Eval("StreetCss")%>">
<div class="DefAreaT"><%# Eval("StreetName")%></div>
<div class="DefAreaC">
<ul>
<asp:Repeater ID="Rep_SNS" runat="server">
<ItemTemplate>
<li><a href="homeList.aspx?homeID=<%# Eval("SNSNo")%>"><%# Eval("SNSName")%></a></li>
</ItemTemplate>
</asp:Repeater>
</ul>
</div>
</div>
</ItemTemplate>
</asp:Repeater>
后台页代码:
/// <summary>
/// 绑定办事处
/// </summary>
private void Bind_Street()
{
string strSql = "select SortNo, StreetNo,StreetName from T_SNSStreetOffice order by SortNo";
DataTable myDt = myDbAccess.GetTable(strSql);
DataTable DT = new DataTable();
DT.Columns.Add("StreetCss");
DT.Columns.Add("StreetName");
DT.Columns.Add("StreetNo");
for (int i = 0; i < myDt.Rows.Count; i++)
{
DataRow dr = DT.NewRow();
if (i % 2 == 0)
{
dr[0] = "DefArea BgColorA";
}
else
{
dr[0] = "DefArea BgColorB";
}
dr[1] = myDt.Rows[i]["StreetName"].ToString();
dr[2] = myDt.Rows[i]["StreetNo"].ToString();
DT.Rows.Add(dr);
}
Rep_StreetName.DataSource = DT;
Rep_StreetName.DataBind();
foreach (RepeaterItem item in Rep_StreetName.Items)
{
Label lblid = item.FindControl("LID") as Label;
Repeater rp = item.FindControl("Rep_SNS") as Repeater;
string strSql1 = "select ID,SNSNo,SNSName from T_SNSInfo where StreetNO='"+lblid.Text+"'";
DataTable myDt1 = myDbAccess.GetTable(strSql1);
DataTable DT1 = new DataTable();
DT1.Columns.Add("SNSName");
DT1.Columns.Add("SNSNo");
for (int i = 0; i < myDt1.Rows.Count; i++)
{
DataRow dr = DT1.NewRow();
dr[0] = myDt1.Rows[i]["SNSName"].ToString();
dr[1] = myDt1.Rows[i]["SNSNo"].ToString();
DT1.Rows.Add(dr);
}
rp.DataSource = DT1;
rp.DataBind();
}
}
没有添加注释,这里解说一下。
首先外层Repeater里加入了一个不显示的label <asp:Label ID="LID" Text='<%# Eval("StreetNo")%>' runat="server" Visible="false"></asp:Label>
是为了后台方便获取读出来的每个外层项的值。
先要把外层Repeater的数据绑定出来,内层的才可以绑定数据,外层绑定数据根据自己习惯写就行。
下面说一下内层绑定:
foreach (RepeaterItem item in Rep_StreetName.Items)//根据外层的项获取内层应该绑定的数据
{
Label lblid = item.FindControl("LID") as Label;//获取每个外层项的查询参数值
Repeater rp = item.FindControl("Rep_SNS") as Repeater;//获取内层Repeater
string strSql1 = "select ID,SNSNo,SNSName from T_SNSInfo where StreetNO='"+lblid.Text+"'";//查询语句
DataTable myDt1 = myDbAccess.GetTable(strSql1);//获取数据
DataTable DT1 = new DataTable();
DT1.Columns.Add("SNSName");
DT1.Columns.Add("SNSNo");
for (int i = 0; i < myDt1.Rows.Count; i++)//循环读取获取到的数据
{
DataRow dr = DT1.NewRow();
dr[0] = myDt1.Rows[i]["SNSName"].ToString();
dr[1] = myDt1.Rows[i]["SNSNo"].ToString();
DT1.Rows.Add(dr);
}
rp.DataSource = DT1;//绑定到内层Repeater
rp.DataBind();
}