Список дочерних элементов RadTreeList равен нулю

У меня проблема с телериком RadTreeList контроль. Когда я загружаю данные в RadTreeListЯ могу получить доступ к его дочерним элементам, только когда нажимаю кнопку "Развернуть". Без расширения, ChildItems список пуст. Есть ли способ получить детей определенного родителя без расширения?

1 ответ

Дочерние элементы присутствуют в элементе управления только при раскрытии родительского элемента. Однако можно расширить элемент в коде, чтобы получить доступ к дочерним элементам. (Затем вы можете восстановить родительский узел в свернутом состоянии, если не хотите, чтобы он отображался в развернутом виде.)

Необходима небольшая осторожность из-за того, когда что-то происходит в жизненном цикле элемента управления:

private bool isGetChildItems = false;

защищенная пустота Page_Load(отправитель объекта, EventArgs e)
{
    if (IsPostBack)
    {
        //if (ваше условие, требующее доступа к дочерним элементам)
        {
            isGetChildItems = true;
            // ваша логика для расширения любых нужных вам узлов
            RadTreeList1.Items[0].Expanded = true;
        }
    }
}

protected void RadTreeList1_DataBound(отправитель объекта, EventArgs e)
{
    // На этом этапе жизненного цикла мы можем получить доступ к дочерним элементам
    if (isGetChildItems)
    {
        // Делаем то, что нам нужно, с дочерними элементами
        ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "", string.Format("alert('Item 0 имеет {0} дочерних элементов')", RadTreeList1.Items[0].ChildItems.Count), true);
    }
}

защищенный void RadTreeList1_PreRender(отправитель объекта, EventArgs e)
{
    if (isGetChildItems)
    {
        // Восстановление состояния узла, очистка нашего флага и повторная привязка
        isGetChildItems = false;
        RadTreeList1.Items[0].Expanded = false;
        RadTreeList1.DataBind();
    }
}
Другие вопросы по тегам