当前位置:编程学习 > C#/ASP.NET >>

帮忙稍微改改递归

  //得到分类表
        public static List<ProductSort> GetAll()
        {
            Database db = DatabaseFactory.CreateDatabase("SqlConnStr");
            string sql = "select * from Street_ProductSort";
            DbCommand com = db.GetSqlStringCommand(sql);
            DataSet ds = db.ExecuteDataSet(com);
            List<ProductSort> list = new List<ProductSort>();

            foreach (DataRow row in GetProductTable().Rows)
            {
                list.Add(ConvertRow(row));
            }
            return list;
        }

        //递归自身 查询ParentID为id相对应的记录
        private static void GetRowsByParentID(DataTable table, int id, ref string sresult)
        {
            //private static void GetRowsByParentID(DataTable table, int id, ref List<DataRow> resultrows)
            //DataRow[] selectrows = table.Select("ParentId=" + id);
            //if (selectrows == null || selectrows.Length == 0)
            //{
            //    return;
            //}
            //else
            //{
            //    foreach (DataRow row in selectrows)
            //    {
            //        resultrows.Add(row);
            //        GetRowsByParentID(table, Convert.ToInt32(row[0]), ref resultrows);
            //    }
            //}
            DataRow[] selectrows = table.Select("ParentId=" + id);
            if (selectrows == null || selectrows.Length == 0)
            {
                return;
            }
            else
            {
                sresult += "<ul>\n";
                foreach (DataRow row in selectrows)
                {
                    sresult += "<li>" + row["Name"] + "<li>\n";
                    GetRowsByParentID(table, Convert.ToInt32(row[0]), ref sresult);
                }
                sresult += "</ul>\n<ul>";
            }
        }
//我想生成<ul><li></li></ul> 这种形式的代码,我这里生成的不正常,大家帮忙修改下。
--------------------编程问答-------------------- 这样?

                sresult += "<ul>\n";
                foreach (DataRow row in selectrows)
                {
                    sresult += "<li>" + row["Name"];
                    GetRowsByParentID(table, Convert.ToInt32(row[0]), ref sresult);
                    sresult += "</li>\n";
                }
                sresult += "</ul>\n<ul>";


还是这样?

                sresult += "<ul>\n";
                foreach (DataRow row in selectrows)
                {
                    sresult += "<li>" + row["Name"] + "</li>\n";
                    GetRowsByParentID(table, Convert.ToInt32(row[0]), ref sresult);
                }
                sresult += "</ul>\n<ul>";

--------------------编程问答-------------------- 不对呢 --------------------编程问答--------------------             if (selectrows == null || selectrows.Length == 0)
            {
                return;
            }
            else
            {
                foreach (DataRow row in selectrows)
                {
                    sresult += "<ul>\n";
                    sresult += "<li>" + row["Name"] + "<li>\n";
                    GetRowsByParentID(table, Convert.ToInt32(row[0]), ref sresult);
                    sresult += "</ul>\n<ul>";
                }   
            }

这样就可以了吧,你试一下
--------------------编程问答-------------------- 不行呢~你做做测试看看 --------------------编程问答-------------------- 那就是这样了:

  if (selectrows == null || selectrows.Length == 0)
  {
  return;
  }
  else
  {
  foreach (DataRow row in selectrows)
  {
  sresult += "<ul>\n";
  sresult += "<li>" + row["Name"] + "<li>\n";
  sresult += "</ul>\n<ul>";
  GetRowsByParentID(table, Convert.ToInt32(row[0]), ref sresult);
  }   
  }
--------------------编程问答-------------------- 明显逻辑不对。 --------------------编程问答--------------------
引用 5 楼 spg2003 的回复:
那就是这样了:

  if (selectrows == null || selectrows.Length == 0)
  {
  return;
  }
  else
  {
  foreach (DataRow row in selectrows)
  {
  sresult += "<ul>\n";
  sresult += "<li>" + row["Name"] ……


你试了没有?你要的不就<ul><li></li></ul>, 还有什么要求?
最好给一个最终你想要的完整的输出结果,
你这个有歧义,
ul><li></li></ul>是一个记录的格式,还是所有记录的? --------------------编程问答-------------------- 表结构:
id Name parentid
1  a       0
2  b       1
3  c       1
4  d       0
你代码遍历看看

我要的结果为

<ul>
<li>a</li>
<ul>
<li>b</li>
<li>c</li>
</ul>
</ul>
<ul>
<li>d</li>
</ul> --------------------编程问答-------------------- <ul>
<li>a</li>
<ul>
<li>b</li>
<li>c</li>
</ul>
</ul>
<ul>
<li>d</li>
</ul> --------------------编程问答--------------------            if (selectrows == null || selectrows.Length == 0)
            {
                return;
            }
            else
            {
                if(selectrows.Count = 1)
                    sresult += "<ul>\n";
                foreach (DataRow row in selectrows)
                {
                    sresult += "<li>" + row["Name"] + "<li>\n";
                    GetRowsByParentID(table, Convert.ToInt32(row[0]), ref sresult);
                }
                if(selectrows.Count = 1)
                     sresult += "</ul>\n<ul>";
            }
--------------------编程问答--------------------
引用 10 楼 spg2003 的回复:
           if (selectrows == null || selectrows.Length == 0)
            {
                return;
            }
            else
            {
                if(selectrows.Count = 1)
       ……


逻辑上有错误,万一select.rows的数量不为1,那么连ul都无法出现了。

很感谢您的回复。谢谢。

逻辑上 --------------------编程问答-------------------- .............. --------------------编程问答-------------------- 楼主的代码没问题,就是最后多了个<ul>
sresult += "</ul>\n"; --------------------编程问答--------------------

sresult += "<ul>\n";
foreach (DataRow row in selectrows)
{
     sresult += "<li>" + row["Name"] + "<li>\n";
}
GetRowsByParentID(table, Convert.ToInt32(row[0]), ref sresult);
sresult += "</ul>\n<ul>";


这样滴吧... --------------------编程问答-------------------- 晕,不好意思,看错了。。。
这样滴你看行不行..

这个方法改一哈,把table变成全局变量
GetRowsByParentID(int id, ref string sresult)
{
   //这里面一个if(判断table!=null  &&  table.count != 0)
    sresult += "<ul>\n";
    foreach (DataRow row in table.Rows)
    { 
      if(row["Prentid"].Tostring() == id.Tostring())
      {
         sresult += "<li>" + row["Name"] + "<li>\n";
         GetRowsByParentID(Convert.ToInt32(row[0]), ref sresult);
      }
     }
     sresult += "</ul>\n<ul>";
}



--------------------编程问答--------------------

                sresult += "<ul>\n";
                foreach (DataRow row in selectrows)
                {
                    sresult += "<li>" + row["Name"] + "<li>\n";
                    GetRowsByParentID(table, Convert.ToInt32(row[0]), ref sresult);
                }
                sresult += "</ul>\n";
--------------------编程问答--------------------
sresult   +=   " <ul> \n "; 
                                foreach   (DataRow   row   in   selectrows) 
                                { 
                                        sresult   +=   " <li> "   +   row[ "Name "]   +   " <li> \n "; 
                                        GetRowsByParentID(table,   Convert.ToInt32(row[0]),   ref   sresult); 
                                } 
                                sresult   +=   " </ul> \n "; 
--------------------编程问答-------------------- 上海创远急招C#程序员;急急急急急急急急急
最好能5.1前到岗;有效时间3个月
http://www.transcom.net.cn/cn/hr/

要求
1.擅长面向对象设计开发(主要技能);

2.有地理信息开发、无线通信行业经验最好;
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,