在asp.net 中怎么做出来的:如下图,是百度知道的问题分类。
4个回答
展开全部
这是个DataList,Repeater嵌套绑定做的,最近我刚做了个Repeater嵌套,你参考下:
.aspx
<asp:Repeater ID="Rpt_main" runat="server" onitemdatabound="Rpt_main_ItemDataBound">
<ItemTemplate>
<div style="width:80%; height:15px; margin-top:10px;" class="margin_left">
<div class="left" style="margin-top:5px; margin-right:5px"><img src="/member/images/ico_21.gif" /></div>
<div class="left" style="font-weight:bold;"> <%# Eval("title")%></div>
</div>
<asp:Repeater ID="Rpt_detal" runat="server">
<HeaderTemplate>
<div class="clear" ></div><!--防止层叠-->
<div class="jy">
</HeaderTemplate>
<ItemTemplate>
<a href="browser.aspx?subid=<%#Eval("belongsubject")%>&Detailid=<%#Eval("subjectid")%>" target="_blank"><%# Eval("title")%></a>
</ItemTemplate>
<FooterTemplate>
<div class="clear"></div><!--防止层叠-->
</div>
</FooterTemplate>
</asp:Repeater>
</ItemTemplate>
<SeparatorTemplate>
<div class="xuXian" style=" width:95%;margin:0 auto; margin-top:5px; margin-bottom:-10px"></div><!---虚线灰色-->
</SeparatorTemplate>
</asp:Repeater>
.cs
protected void Drp_Bind()
{
//状态为0代表为普通主科室
ListModel = SubBLL.GetModelList(" subjectstate=0");
if (subModel != null)
{
this.Rpt_main.DataSource = ListModel;
this.Rpt_main.DataBind(); //绑定数据。
}
}
protected void Rpt_main_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
Repeater rptdetal = (Repeater)e.Item.FindControl("Rpt_detal");
//找到科室Repeater关联的数据项
subModel = (Maticsoft.Model.order_subject)e.Item.DataItem;
//提取主科室ID
int MainId = subModel.subjectid;
//根据主科室ID查询该科室下的细科,并绑定产品Repeater
rptdetal.DataSource = SubBLL.GetModelList("belongsubject=" + MainId + "");
rptdetal.DataBind();
}
}
后台就分两部分绑定,具体绑定就不全写出来了,不知道你看得懂不,其实就嵌套循环,各自己绑定。
.aspx
<asp:Repeater ID="Rpt_main" runat="server" onitemdatabound="Rpt_main_ItemDataBound">
<ItemTemplate>
<div style="width:80%; height:15px; margin-top:10px;" class="margin_left">
<div class="left" style="margin-top:5px; margin-right:5px"><img src="/member/images/ico_21.gif" /></div>
<div class="left" style="font-weight:bold;"> <%# Eval("title")%></div>
</div>
<asp:Repeater ID="Rpt_detal" runat="server">
<HeaderTemplate>
<div class="clear" ></div><!--防止层叠-->
<div class="jy">
</HeaderTemplate>
<ItemTemplate>
<a href="browser.aspx?subid=<%#Eval("belongsubject")%>&Detailid=<%#Eval("subjectid")%>" target="_blank"><%# Eval("title")%></a>
</ItemTemplate>
<FooterTemplate>
<div class="clear"></div><!--防止层叠-->
</div>
</FooterTemplate>
</asp:Repeater>
</ItemTemplate>
<SeparatorTemplate>
<div class="xuXian" style=" width:95%;margin:0 auto; margin-top:5px; margin-bottom:-10px"></div><!---虚线灰色-->
</SeparatorTemplate>
</asp:Repeater>
.cs
protected void Drp_Bind()
{
//状态为0代表为普通主科室
ListModel = SubBLL.GetModelList(" subjectstate=0");
if (subModel != null)
{
this.Rpt_main.DataSource = ListModel;
this.Rpt_main.DataBind(); //绑定数据。
}
}
protected void Rpt_main_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
Repeater rptdetal = (Repeater)e.Item.FindControl("Rpt_detal");
//找到科室Repeater关联的数据项
subModel = (Maticsoft.Model.order_subject)e.Item.DataItem;
//提取主科室ID
int MainId = subModel.subjectid;
//根据主科室ID查询该科室下的细科,并绑定产品Repeater
rptdetal.DataSource = SubBLL.GetModelList("belongsubject=" + MainId + "");
rptdetal.DataBind();
}
}
后台就分两部分绑定,具体绑定就不全写出来了,不知道你看得懂不,其实就嵌套循环,各自己绑定。
展开全部
其实就是两个数据控件的嵌套,重要的不是前台,而是后台如何为子控件绑定数据。
你看下我的代码,我是用两个datalist嵌套的
<asp:DataList ID="dt1" runat="server" Width="100%" OnItemDataBound="dt1_ItemDataBound" >
<ItemTemplate>
<span style="margin-left:5px; margin-right:10px;">•<%#Eval("title") %></span>
<asp:DataList ID="dt2" runat="server" Width="100%">
<ItemTemplate>
<span style="padding-left:20px;"><a href="cp_list1.aspx?id=<%#Eval("id") %>"><%#Eval("title") %></a></span><br />
</ItemTemplate>
</asp:DataList>
</ItemTemplate>
</asp:DataList>
看到OnItemDataBound="dt1_ItemDataBound"这个了吗?这个才是实现嵌套的关键。然后在后台加入以下的代码
protected void dt1_ItemDataBound(object sender, System.Web.UI.WebControls.DataListItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
DataList dt = (DataList)e.Item.FindControl("dt2");
DataRowView rowv = (DataRowView)e.Item.DataItem;
int sum=Convert.ToInt32(rowv["id"]);
if(sum>0)
{
string sql1 = "select * from type where lid=" +sum;
DataSet ds1 = DBhelper.getdata(sql1);
dt.DataSource = ds1;
dt.DataBind();
}
}
}
实现的原理就是在dt1绑定数据的时候,寻找到子控件dt2,用的方法就是findcontrol
如果还看不懂,就加我吧!
你看下我的代码,我是用两个datalist嵌套的
<asp:DataList ID="dt1" runat="server" Width="100%" OnItemDataBound="dt1_ItemDataBound" >
<ItemTemplate>
<span style="margin-left:5px; margin-right:10px;">•<%#Eval("title") %></span>
<asp:DataList ID="dt2" runat="server" Width="100%">
<ItemTemplate>
<span style="padding-left:20px;"><a href="cp_list1.aspx?id=<%#Eval("id") %>"><%#Eval("title") %></a></span><br />
</ItemTemplate>
</asp:DataList>
</ItemTemplate>
</asp:DataList>
看到OnItemDataBound="dt1_ItemDataBound"这个了吗?这个才是实现嵌套的关键。然后在后台加入以下的代码
protected void dt1_ItemDataBound(object sender, System.Web.UI.WebControls.DataListItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
DataList dt = (DataList)e.Item.FindControl("dt2");
DataRowView rowv = (DataRowView)e.Item.DataItem;
int sum=Convert.ToInt32(rowv["id"]);
if(sum>0)
{
string sql1 = "select * from type where lid=" +sum;
DataSet ds1 = DBhelper.getdata(sql1);
dt.DataSource = ds1;
dt.DataBind();
}
}
}
实现的原理就是在dt1绑定数据的时候,寻找到子控件dt2,用的方法就是findcontrol
如果还看不懂,就加我吧!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你得嵌套控件。。就是列表里面还有列表
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
很多控件都可以啊比如DataList,Repeater都可以实现
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询