Предполагая, что вы можете рассчитать «Глубину» каждого узла, вы можете добавить следующий код в OnPreRender и отобразить ваши элементы в иерархическом порядке:
protected void overrided OnPreRender()
{
lstItems.Items.Do(a=>
{
var item = // get item from a.Value
for(var i = 0; i< item.Depth; i++)
{
a.Text = "<span class='spacer'></span>" + a.Text;
}
});
}
и добавить следующее правило в таблицы стилей:
span.spacer { width:20px; }
Хотя, если вы хотите иметь функцию свертывания / развертывания, вам нужно будет добавить некоторые действия javascript, которые я не буду здесь включать (слишком упрощенно)
PS Важно, чтобы элементыдобавленные в lstItems упорядочены правильно на основе иерархической структуры.Решение, которое я рекомендую, - использовать следующий метод в качестве ключа сортировки вашего источника данных:
public string GetFullPath()
{
if(Parent == null) return Key;
return Parent.GetFullPath() + ">" + Key;
}
Где Key - это уникальное поле (в контексте одного родителя).- Это может быть имя, заказ и т. Д.