廢話不多說,先上效果圖。
爲了達到這樣的顯示效果, 同時爲了後臺修改後,前臺也直接修改的效果。用了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();
}