Repeater 无限分类怎么不能成树状绑定?
数据表1张,如下:C#代码aspx代码:
<asp:Repeater ID="bClass" runat="server">
<ItemTemplate>
<li class="expandable"><div class="hitarea expandable-hitarea "></div><strong> <%#Eval("DepartmentName")%></strong></a>
<ul style="display: none; ">
</ul>
</li>
</ItemTemplate>
</asp:Repeater>
后台代码:
namespace test
{
public partial class WebForm7 : System.Web.UI.Page
{
DataSet data = new DataSet();
protected void Page_Load(object sender, EventArgs e)
{
DataTable dt = GetList("select * from OA_GoodType").Tables[0];
this.bClass.DataSource = GetTreeList(dt, "ID", "Pid", 0);
bClass.DataBind();//subCate是Repeater控件
}
public DataSet GetList(string sql)
{
SqlConnection cnn = new SqlConnection("server=192.168.11.221;uid=sa;pwd=123;database=test;");
SqlDataAdapter cmd1 = new SqlDataAdapter(sql, cnn);
DataSet ds = new DataSet();
cmd1.Fill(ds, "GoodType");
return ds;
}
/// <summary>
/// dt 要从中生成树状数据源
/// IdField ID字段列名
/// ParentField 父级ID列名
/// Pid 父级ID值
/// OrderField 排序字段
/// </summary>
public DataTable GetTreeList(DataTable dt, string IdField, string ParentField, int Pid)
{
DataTable newDT = dt.Clone();// 克隆dt 的结构,包括所有 dt 架构和约束,并无数据;
DataRow[] rows;
/*
* 如果父级pid等于本ID时表示顶级分类的情况 用以下语句
*/
if (Pid == 0)//选出顶级的类别
{
rows = dt.Select(ParentField + "=" + 0); // 从dt 中查询符合条件的记录(选出所有大类);
}
else//选出属于所传ID的子类
{
rows = dt.Select(ParentField + "<>" + IdField + " and " + ParentField + "=" + Pid); // 从dt 中查询符合条件的记录(选出大类pid的子类);
}
/*
* 如果父ID为0的时候表示顶级分类,用以下语句
* rows = dt.Select(ParentField + "=" + Pid, OrderField);
*/
if (rows.Length > 0)
{
foreach (DataRow row in rows) // 将查询的结果添加到dt中;
{
newDT.Rows.Add(row.ItemArray);
int innerpid = int.Parse(row["id"].ToString());
DataRow[] Childows = dt.Select(ParentField + "<>" + IdField + " and " + ParentField + "=" + innerpid);//选出子类
if (Childows.Length > 0)//如果存在子类,对子类进行递归
{
DataTable innerDT = GetTreeList(dt, IdField, ParentField, innerpid);//获取子类DataTable
foreach (DataRow innerrow in innerDT.Rows)//对子类的DataTable添加进总数据源
{
newDT.Rows.Add(innerrow.ItemArray);
}
}
}
}
return newDT;
}
}
}
运行后的结果:
疑问:
为什么运行后不是成树形、子父关系显示?????各位大侠帮帮忙看看那里有问题?????这问题已困扰我一天了 --------------------编程问答-------------------- /// <summary>
/// 从内存中取得所有下级栏目列表(自身迭代)
/// </summary>
private void GetChannelChild(DataTable oldData, DataTable newData, int PId, int KId)
{
DataRow[] dr = oldData.Select("parent_id=" + PId);
for (int i = 0; i < dr.Length; i++)
{
//添加一行数据
DataRow row = newData.NewRow();
row["id"] = int.Parse(dr[i]["id"].ToString());
row["title"] = dr[i]["title"].ToString();
row["parent_id"] = int.Parse(dr[i]["parent_id"].ToString());
row["class_list"] = dr[i]["class_list"].ToString();
row["class_layer"] = int.Parse(dr[i]["class_layer"].ToString());
row["sort_id"] = int.Parse(dr[i]["sort_id"].ToString());
row["page_url"] = dr[i]["page_url"].ToString();
row["kind_id"] = int.Parse(dr[i]["kind_id"].ToString());
newData.Rows.Add(row);
//调用自身迭代
this.GetChannelChild(oldData, newData, int.Parse(dr[i]["id"].ToString()), KId);
}
} --------------------编程问答-------------------- 单独这个控件,是不行的吧.
--------------------编程问答-------------------- y13550297325
你说的这个怎么用?能具体点不????????
补充:.NET技术 , ASP.NET