日期:2014-05-20  浏览次数:20667 次

c# 简单的遍历问题???,在线等
我现在数据结构如下:

list_id,suplist_id,list_title,list_type
  1 0 最新资讯 文章
  2 0 产品分类 文章
  3 2 农机产品 图片
  4 2 产品新闻 文章
  5 3 小型农机 图片
  6 5 小型机型 图片


我想实现只要本身或子级存在类型为图片的就显示出来

请各位帮帮忙吧




------解决方案--------------------
SQL code
create table tb(list_id int,suplist_id int,list_title nvarchar(10),list_type nvarchar(10))
insert into tb select 1,0,'最新资讯','文章'
insert into tb select 2,0,'产品分类','文章'
insert into tb select 3,2,'农机产品','图片'
insert into tb select 4,2,'产品新闻','文章'
insert into tb select 5,3,'小型农机','图片'
insert into tb select 6,5,'小型机型','图片'
go
;with cte as(
select * from tb where list_type='图片'
union all
select a.* from tb a inner join cte b on a.list_id=b.suplist_id
)select distinct * from cte order by list_id
/*
list_id     suplist_id  list_title list_type
----------- ----------- ---------- ----------
2           0           产品分类       文章
3           2           农机产品       图片
5           3           小型农机       图片
6           5           小型机型       图片

(4 行受影响)

*/
go
drop table tb

------解决方案--------------------
C# code
public partial class _Default : System.Web.UI.Page
{
    Dictionary<int, string> dic;
    DataTable dt;
    protected void Page_Load(object sender, EventArgs e)
    {
        dic = new Dictionary<int, string>();
        dt = GetDataTable();
        DataRow[] row = dt.Select("list_type='图片'");
        foreach (DataRow r in row)
        {
            dic.Add(Convert.ToInt32(r["list_id"]), r["list_title"].ToString());
            GetType(Convert.ToInt32(r["suplist_id"]));
        }
        foreach (KeyValuePair<int, string> k in dic)
            Response.Write(k.Key + "==" + k.Value + "<br/>");
    }
    public void GetType(int suplistid)
    {
        DataRow[] row = dt.Select("list_id=" + suplistid);
        foreach (DataRow r in row)
        {
            if (!dic.ContainsKey(Convert.ToInt32(r["list_id"])))
                dic.Add(Convert.ToInt32(r["list_id"]), r["list_title"].ToString());
            if (Convert.ToInt32(r["suplist_id"]) > 0)
                GetType(Convert.ToInt32(r["suplist_id"]));
        }
    }
    public DataTable GetDataTable()
    {
        DataTable dt = new DataTable();
        using (SqlConnection conn = new SqlConnection())
        {
            conn.ConnectionString = ConfigurationManager.ConnectionStrings["testConnection"].ConnectionString;
            SqlDataAdapter da = new SqlDataAdapter("select list_id,suplist_id,list_title,list_type from test", conn);
            da.Fill(dt);
        }
        return dt;
    }
}