Задать вопрос

Как сделать правильную рекурсию?

Добрый день.

Ребята очень вас прошу помогите да с рекурсией отображения каталогов

Вот пример кода

private string РекурсивныйСписок(string kode) 
{
  OleDbCommand select_array = new OleDbCommand("SELECT * FROM table WHERE PARENTKOD = '" + kode + "'");
            DataTable dt_array = new DataTable(select_array);
 
            List<string> array = new List<string>();
            string ids = null;
 
            array.Add(dir);
            foreach (DataRow dd_s in dt_array.Rows)
            {
                array.Add(dd_s["KOD"].ToString());
                //this.РекурсивныйСписок(dd_s["KOD"].ToString());
            }
            return array.Count().ToString();
        }


Что тут не так но не выводит нужный список рекурсивных каталогов, на PHP я делал но типа такого

public static function list_noHtml($cats = null,$parent_id = null)
    {
        if (is_array($cats) and count($cats[$parent_id]) > 0)
        {
            $tree = '';
            foreach ($cats[$parent_id] as $cat)
            {
                $tree .= $cat['code'].',';
                $tree .= self::list_noHtml($cats, $cat['code']);
            }

        } else
        {
            return null;
        }
        return $tree;
    }


    $resultcat1 = $dbase->executeQuery("SELECT * FROM `tbl_catalog` WHERE position > 0  ORDER BY `position`")->fetchAll();
    $resultcat2 = $dbase->executeQuery("SELECT * FROM `tbl_catalog` WHERE position = 0  ORDER BY `name`")->fetchAll();
    $resultcat  = array_merge($resultcat1, $resultcat2);
 $catscat    = [];

    foreach ($resultcat as $catcat)
    {
        $catscat[$catcat['parent_code']][] = $catcat;
    }

 $result = \substr($catid.','.Store::list_noHtml($catscat, $catid), 0, -1);


Никак не могу вот воссоздать то что я делал в PHP на c#.

Помогите да очень вас прошу, уже 2 дня ломаю голову.

Структура SQL таблицы

table
KOD
NAME
PARENTKOD
  • Вопрос задан
  • 155 просмотров
Подписаться 1 Оценить 1 комментарий
Пригласить эксперта
Ответы на вопрос 1
EreminD
@EreminD
Кое-что умею
Не понятно, пока, в чем сложность
Код тута
private string GetTree(string kode)
		{
			OleDbCommand select_array = new OleDbCommand("SELECT * FROM table WHERE PARENTKOD = '" + kode + "'");
			DataTable dt_array = new DataTable(select_array);

			List<string> array = new List<string>();
			string ids = string.Empty;

			array.Add(dir);
			foreach (DataRow dd_s in dt_array.Rows)
			{
				//здесь храним текущий код
				string CurrentKode = dd_s["KOD"].ToString();
				//если он есть и/или не пустой
				if (!String.IsNullOrEmpty(CurrentKode))
				{
					//записываем его
					array.Add(CurrentKode);
					//получаем все записи по этому самому коду
					GetTree(CurrentKode);
				}
				//а еще проблема вот тут может быть, т.к. return - это выход из функции. 
				//Значит, после отработки для первого dd_s из dt_array.Rows, будет выход из функции и все
				return array.Count().ToString();
			}
			//логичнее, вот тут указать
			//return array.Count().ToString();
		}

Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы