这种嵌套的数据的checkbox(checkboxlist)如何实现?

fangss 2007-11-01 10:09:05
有两张表:category 和category_attribute. 每个category有多种category_attribute.
category:
category_id category_name
-----------------------------
1 category1
2 category2
...

category_attribute
attribute_id category_id attribute_name
-------------------------------------------------
1 1 attr1
2 1 attr2
3 2 attr3
...
数据是动态的。

页面要求显示:
每个category的category_name作为label显示,然后下面使用checkbhox显示这个category 的attribute。

上述例子应该显示为:
category1
口attr1 口attr2

category2
口attr3

...

本人第一次使用asp.net2 (vs2005)以前是java/jsp的。
所以说的越详细越好,最好附代码。

另外,我还有两个问题没有答案,欢迎大家回答。有了答案马上结贴
参数传递的问题:<a href="http://topic.csdn.net/u/20071026/10/fe650dbf-5f31-48af-97ed-5e96729f216d.html">http://topic.csdn.net/u/20071026/10/fe650dbf-5f31-48af-97ed-5e96729f216d.html</a>
显示带图片的列表的问题:<a href="http://topic.csdn.net/u/20071031/13/c0e82bd8-7220-435d-b088-e156432e6503.html">http://topic.csdn.net/u/20071031/13/c0e82bd8-7220-435d-b088-e156432e6503.html</a>

时间紧,任务重,谢谢~~




...全文
206 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
fangss 2007-11-01
  • 打赏
  • 举报
回复
好好学习,天天向上,dataListTab_ItemDataBound是正解?可是他的代码怎么看得我这么费解啊?
wuxing2006 2007-11-01
  • 打赏
  • 举报
回复
楼上的方法正解

在DataList的DataBound事件里FindControl 然后给checkboxlist 绑定
fangss 2007-11-01
  • 打赏
  • 举报
回复
谢谢~~我暂时先尝试使用datalist嵌套checkboxlist.
asp:DataList ID="dlCategory" runat="server">
<ItemTemplate>
<b><asp:Label ID="lblCategoryName" runat="server" Text='<%# Eval("category_name") %>' /></b>
<asp:CheckBoxList runat="server" DataSourceID="dsAttr" DataTextField="attribute_name" DataValueField="attribute_id" RepeatColumns="3" RepeatDirection="Horizontal">
</asp:CheckBoxList>
</ItemTemplate>
</asp:DataList>

<asp:SqlDataSource ID="dsAttr" runat="server" ProviderName="MySql.Data.MySqlClient" ConnectionString="<%$ connectionStrings:ascentConnStr %>" SelectCommand="select attribute_id, attribute_name from category_attribute where category_id=@categoryId" >
<SelectParameters>
<asp:QueryStringParameter QueryStringField="categoryid" Name="ParentID" DefaultValue="0" />
</SelectParameters>
/asp:SqlDataSource>

如果不需要传参数,我的结果已经出来了。可以如何获得每个categoryid给datasource呢?
WNASP 2007-11-01
  • 打赏
  • 举报
回复

部分代码
private void dataListTab_ItemDataBound(object sender, System.Web.UI.WebControls.DataListItemEventArgs e)
{

arrTabs = RemoveSubSurveyPages(arrTabs);

this.LoadDataSub_Vertical(arrTabs,e);
}

private void LoadDataSub_Vertical(ArrayList tabs,System.Web.UI.WebControls.DataListItemEventArgs e)
{
DataList dlSubTab_Vertical=e.Item.FindControl("dataListSubTab_Vertical") as DataList;
this.dataListSubTab_Vertical = dlSubTab_Vertical;
this.dataListSubTab_Vertical.RepeatDirection=this.TabDirection;
this.dataListSubTab_Vertical.ItemDataBound += new System.Web.UI.WebControls.DataListItemEventHandler(this.dataListSubTab_Vertical_ItemDataBound);

this.dataListSubTab_Vertical.DataSource=tabs;
this.SetAtiveTab_Vertical(tabs);
this.dataListSubTab_Vertical.DataBind();
}
路人乙e 2007-11-01
  • 打赏
  • 举报
回复
哦,是checkbox
cateStr += "<input id='chk_" + i.ToString() + "_" + j.ToString() + "' type='checkbox' value='" + rows[j]["attribute_name"].ToString() + "' /><lable for='chk_" + i.ToString() + "_" + j.ToString() + "'>" + rows[j]["attribute_name"].ToString() + "</lable>" + "  ";

用js获取选择值
路人乙e 2007-11-01
  • 打赏
  • 举报
回复

string sql = "select category.*,category_attribute.attribute_name from category,category_attribute where category.category_id=category_attribute.category_id";
DataTable cateTable = DB.GetTable(sql);//返回一个DataTable对象
string cateStr = "";
int j = 0;
string id;
DataRow[] rows;
for(int i=0;i<cateTable.Rows.Count;i+=j)
{
cateStr += "<h3>" + cateTable.Rows[i]["category_name"].ToString() + "</h3>";
id = cateTable.Rows[i]["category_id"].ToString();
rows = cateTable.Select("category_id="+ id);
for(j=0;j<rows.Length;j++)
{
cateStr += rows[j]["attribute_name"].ToString() + "  ";
}
}
Response.Write(cateStr);
honey52570 2007-11-01
  • 打赏
  • 举报
回复
里面用datalist,那就要手动绑定数据 在DataBond事件中写
fangss 2007-11-01
  • 打赏
  • 举报
回复
如何嵌套啊?可否给些实例代码啊
fangss 2007-11-01
  • 打赏
  • 举报
回复
里面还用datalist?参数如何传递啊?
fangss 2007-11-01
  • 打赏
  • 举报
回复
谢谢~~
思路大概有了,
如何显示在页面上啊?
WNASP 2007-11-01
  • 打赏
  • 举报
回复
或者你用datalist作嵌套,就是说外面一个datalist,里面一个datalist
外面的现实category,外面的现实chekbox
最后直接绑定就可以了
WNASP 2007-11-01
  • 打赏
  • 举报
回复
select * from category c
inner join category_attribute ca on ca.category_id=c.category_id

然后在程序里面循环遍历,拼装生成HTML,最后给一个DIV的innerhtml赋值就可以了
zs621 2007-11-01
  • 打赏
  • 举报
回复
先查出category_name 返回dt1
for(int i=0;i<dt1.rows.count;i++)
{
lable lb=new lable();
lb.id=dt1.rows[i][0].tostring();
添加lb控件
根据dt1.rows[i][0].tostring()查出attribute_name
返回dt
checkboxlist ha=new checkboxlist();
ha.id=" ";
添加ha控件
ha.datasource=dt;
ha.DataTextField="attribute_name ";
ha.databind()
}
SaintKaKa 2007-11-01
  • 打赏
  • 举报
回复
用datalist控件
select distinct
header显示为category_name
item的模板加入checkbox 和label (label按category_id绑定attribute_name)
zs621 2007-11-01
  • 打赏
  • 举报
回复
先查出category_name 创建lable
循环 在每个category_name 下查出attribute_name
绑定给创建的checkboxlist
fangss 2007-11-01
  • 打赏
  • 举报
回复
对,都要动态生成,从数据库中取得的。
fangss 2007-11-01
  • 打赏
  • 举报
回复
就是如何从数据库中取得记录,在页面上显示为:

category1
口attr1 口attr2

category2
口attr3

口=checkbox
zs621 2007-11-01
  • 打赏
  • 举报
回复
那你的lable和checkbox(checkboxlist不是更好吗)也是动态生成的了?
yxhly 2007-11-01
  • 打赏
  • 举报
回复
没有看懂你到底是什么意思。。不好意思
fangss 2007-11-01
  • 打赏
  • 举报
回复
结合大家的意见,自己再摸索一下,成功!谢谢各位!

62,268

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧