PopulateOnDemand не работает с привязкой к данным ASP.Net TreeView - PullRequest
1 голос
/ 01 марта 2010

У меня есть TreeView, который связан с элементом управления XmlDataSource. Я добавил несколько элементов TreeNodeBinding, чтобы определить способ отображения данных XML.

Я также добавил PopulateOnDemand = true к этим TreeNodeBindings. Однако это ничего не изменило, и отображается все дерево XML. Более того, событие TreeNodePopulate также не запускается при расширении узла.

Важная информация: я использую ASP.NET 4.

Это пример, который воспроизводит проблему (очень прямо):

<%@ Page Language="C#" AutoEventWireup="true" %>

<script type="text/C#" runat="server">
  protected void TreeView1_TreeNodePopulate(Object sender, TreeNodeEventArgs e)
  {
    // This method is never called...
  }
</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
      <asp:TreeView ID="TreeView1" runat="server" DataSourceID="XmlDataSource1" OnTreeNodePopulate="TreeView1_TreeNodePopulate" ExpandDepth="0">
        <DataBindings>           
          <asp:TreeNodeBinding DataMember="#" TextField="#" ValueField="#" PopulateOnDemand="true" />          
        </DataBindings>       
      </asp:TreeView>
      <asp:XmlDataSource ID="XmlDataSource1" runat="server" DataFile="Sample.xml" />
    </div>
    </form>
</body>
</html>

Sample.xml может быть любым XML-файлом, который вам нужен, это не имеет значения.

Я пытался установить точку останова в методе TreeView1_TreeNodePopulate, но она никогда не была достигнута.

Я также пытался:

  • Установите привязку TreeNodeBinding для каждого возможного элемента данных с помощью PopulateOnDemand = "true".
  • Через код просмотрите все узлы дерева и установите для их свойства PopulateOnDemand значение true.

Ничего не сработало.

Единственный способ, которым работало заполнение по требованию, состоял в том, когда я добавлял узлы вручную к узлам вместо того, чтобы связывать их с источником данных.

Что я делаю не так?

Ответы [ 3 ]

2 голосов
/ 08 марта 2010

Что ж, получается, что вы не можете использовать привязку данных и PopulateOnDemand одновременно. Если вы хотите заполнить узлы по требованию, вам придется читать из источника данных и создавать узлы с помощью кода, а не с помощью привязки данных.

2 голосов
/ 05 марта 2010

Установите для свойства TreeNode.PopulateOnDemand каждого узла значение True

TreeView.TreeNodePopulate Событие Происходит, когда узел со свойством PopulateOnDemand, установленным в значение true, раскрывается в элементе управления TreeView.

0 голосов
/ 29 мая 2013

Переместите команду PopulateonDemand наверх!

        bool Expanded = Convert.ToBoolean(Convert.ToInt16(dr["Expand"].ToString().Trim()));
        TreeNode tn = new TreeNode();

        tn.PopulateOnDemand = true;
        tn.Expanded = Expanded;
        tn.Text = dr["Menu"].ToString();
        tn.Value = dr["ItemOrder"].ToString();
        tn.NavigateUrl = "";

        if (!string.IsNullOrEmpty(dr["Page"].ToString()))
        {
            tn.NavigateUrl = dr["Page"].ToString();
        }

        nodes.Add(tn);
...