数据表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;
}
}
}运行后的结果:
疑问:
为什么运行后不是成树形、子父关系显示?????各位大侠帮帮忙看看那里有问题?????这问题已困扰我一天了
<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;
}
}
}运行后的结果:
疑问:
为什么运行后不是成树形、子父关系显示?????各位大侠帮帮忙看看那里有问题?????这问题已困扰我一天了
解决方案 »
- 帮帮忙!!!!!!!!!!!!!!!!!!!!!!!!!!
- 百分求:关于WebBrowser,web与winform交互
- VS2008怎么和SQL2005连接呢````!?
- 控制IP访问页面的问题?
- HttpException (0x80004005): 无法验证数据。
- 为什么我无法下载Csdn的资源了
- 请高手帮帮忙,关于定时更新浏览量问题~~~~~~~谢谢
- help me!!!提交后,数据显示的问题
- 高手们,问个问题:如何从数据库中取出二进制的图片放到创建好的文件夹中
- 怎么开发一个web editor可以import 有数学公式的 word 文档并且可以编辑?
- 关于facebook api的问题
- 过多使用用户控件对网站性能有何影响?
/// 从内存中取得所有下级栏目列表(自身迭代)
/// </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);
}
}