Esta documentación está archivada y no tiene mantenimiento.

TreeView.TreeNodePopulate (Evento)

Aparece cuando un nodo con su propiedad PopulateOnDemand establecida en true se expande en el control TreeView.

Espacio de nombres: System.Web.UI.WebControls
Ensamblado: System.Web (en system.web.dll)

public event TreeNodeEventHandler TreeNodePopulate
/** @event */
public void add_TreeNodePopulate (TreeNodeEventHandler value)

/** @event */
public void remove_TreeNodePopulate (TreeNodeEventHandler value)

En JScript, se pueden controlar los eventos que define una clase, pero no se pueden definir unos propios.
No aplicable.

En ocasiones, no resulta práctico predefinir la estructura del árbol estáticamente, porque el tamaño de los datos o el contenido personalizado pueden depender de la información proporcionada por el usuario. Debido a esto, el control TreeView admite que los nodos se rellenen de forma dinámica. Cuando se establece la propiedad PopulateOnDemand de un nodo en true, el nodo se rellena en tiempo de ejecución cuando se expande.

Para rellenar dinámicamente un nodo, establezca primero la propiedad PopulateOnDemand para el nodo en true. Luego, defina un método de control de eventos para el evento TreeNodePopulate que rellena el nodo mediante programación. Un método típico de control de eventos recupera datos del nodo de un origen de datos, coloca los datos en una estructura de datos y, a continuación, agrega la estructura de nodo a la colección ChildNodes del nodo que se está llenando. Una estructura de nodo se crea agregando objetos TreeNode a la colección ChildNodes de un nodo primario.

NotaNota:

Cuando la propiedad PopulateOnDemand de un nodo se establece en true, el nodo se debe rellenar dinámicamente. No se puede anidar mediante declaración otro nodo debajo de él; de lo contrario, aparecerá un error en la página.

Los exploradores compatibles (exploradores de compatibles con Microsoft Internet Explorer versión 4.0 y posteriores) también pueden aprovechar el relleno de nodos del lado cliente. Cuando está habilitado, permite que el control TreeView rellene dinámicamente un nodo del cliente al expandir ese nodo, lo que evita la necesidad de devolver datos al servidor. Para obtener más información sobre el relleno de nodos en el cliente, vea PopulateNodesFromClient.

Para obtener más información sobre la forma de controlar eventos, vea Utilizar eventos.

El ejemplo de código siguiente muestra cómo utilizar el evento TreeNodePopulate para rellenar dinámicamente los nodos del control TreeView en el servidor. Observe que la propiedad EnableClientScript se establece en false para evitar que los eventos de expansión de nodo se controlen en el cliente.


<%@ Page Language="C#" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">

  void PopulateNode(Object sender, TreeNodeEventArgs e)
  {

    // Call the appropriate method to populate a node at a particular level.
    switch(e.Node.Depth)
    {
      case 0:
        // Populate the first-level nodes.
        PopulateCategories(e.Node);
        break;
      case 1:
        // Populate the second-level nodes.
        PopulateProducts(e.Node);
        break;
      default:
        // Do nothing.
        break;
    }
    
  }

  void PopulateCategories(TreeNode node)
  {
    
    // Query for the product categories. These are the values
    // for the second-level nodes.
    DataSet ResultSet = RunQuery("Select CategoryID, CategoryName From Categories");

    // Create the second-level nodes.
    if(ResultSet.Tables.Count > 0)
    {
    
      // Iterate through and create a new node for each row in the query results.
      // Notice that the query results are stored in the table of the DataSet.
      foreach (DataRow row in ResultSet.Tables[0].Rows)
      {
        
        // Create the new node. Notice that the CategoryId is stored in the Value property 
        // of the node. This will make querying for items in a specific category easier when
        // the third-level nodes are created. 
        TreeNode NewNode = new TreeNode(row["CategoryName"].ToString(), row["CategoryID"].ToString());
        
        // Set the PopulateOnDemand property to true so that the child nodes can be 
        // dynamically populated.
        NewNode.PopulateOnDemand = true;
        
        // Set additional properties for the node.
        NewNode.SelectAction = TreeNodeSelectAction.Expand;
        
        // Add the new node to the ChildNodes collection of the parent node.
        node.ChildNodes.Add(NewNode);
        
      }
      
    }
    
  }

  void PopulateProducts(TreeNode node)
  {

    // Query for the products of the current category. These are the values
    // for the third-level nodes.
    DataSet ResultSet = RunQuery("Select ProductName From Products Where CategoryID=" + node.Value);

    // Create the third-level nodes.
    if(ResultSet.Tables.Count > 0)
    {
    
      // Iterate through and create a new node for each row in the query results.
      // Notice that the query results are stored in the table of the DataSet.
      foreach (DataRow row in ResultSet.Tables[0].Rows)
      {
      
        // Create the new node.
        TreeNode NewNode = new TreeNode(row["ProductName"].ToString());
        
        // Set the PopulateOnDemand property to false because these are leaf nodes and
        // do not need to be populated.
        NewNode.PopulateOnDemand = false;
        
        // Set additional properties for the node.
        NewNode.SelectAction = TreeNodeSelectAction.None;
        
        // Add the new node to the ChildNodes collection of the parent node.
        node.ChildNodes.Add(NewNode);
        
      }
      
    }

  }

  DataSet RunQuery(String QueryString)
  {

    // Declare the connection string. This example uses Microsoft SQL Server and connects to the
    // Northwind sample database.
    String ConnectionString = "server=localhost;database=NorthWind;Integrated Security=SSPI"; 

    SqlConnection DBConnection = new SqlConnection(ConnectionString);
    SqlDataAdapter DBAdapter;
    DataSet ResultsDataSet = new DataSet();

    try
    {

      // Run the query and create a DataSet.
      DBAdapter = new SqlDataAdapter(QueryString, DBConnection);
      DBAdapter.Fill(ResultsDataSet);

      // Close the database connection.
      DBConnection.Close();

    }
    catch(Exception ex)
    {

      // Close the database connection if it is still open.
      if(DBConnection.State == ConnectionState.Open)
      {
        DBConnection.Close();
      }
      
      Message.Text = "Unable to connect to the database.";

    }

    return ResultsDataSet;

  }

</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
  <head runat="server">
    <title>TreeView TreeNodePopulate Example</title>
</head>
<body>
    <form id="form1" runat="server">
    
      <h3>TreeView TreeNodePopulate Example</h3>
    
      <asp:TreeView id="LinksTreeView"
        Font-Names= "Arial"
        ForeColor="Blue"
        EnableClientScript="false" 
        OnTreeNodePopulate="PopulateNode"
        runat="server">
         
        <Nodes>
        
          <asp:TreeNode Text="Inventory" 
            SelectAction="Expand"  
            PopulateOnDemand="true"/>
        
        </Nodes>
        
      </asp:TreeView>
      
      <br /><br />
      
      <asp:Label id="Message" runat="server"/>

    </form>
  </body>
</html>


Windows 98, Windows 2000 Service Pack 4, Windows CE, Windows Millennium, Windows Mobile para Pocket PC, Windows Mobile para Smartphone, Windows Server 2003, Windows XP Media Center, Windows XP Professional x64, Windows XP SP2, Windows XP Starter

Microsoft .NET Framework 3.0 es compatible con Windows Vista, Microsoft Windows XP SP2 y Windows Server 2003 SP1.

.NET Framework

Compatible con: 3.0, 2.0
Mostrar: