当前位置: 代码迷 >> ASP.NET >> treeview根据条件动态加载节点?该如何解决
  详细解决方案

treeview根据条件动态加载节点?该如何解决

热度:962   发布时间:2013-02-25 00:00:00.0
treeview根据条件动态加载节点?
实现treeview根据条件动态加载节点:
开始时treeview默认加载第一章内容
+第一章
  ----第1节.
  ----第2节
  ----第3节
  ----quiz
,根据条件(在第一章停留的时间+quiz)如果条件满足则可以通过申请,再在第一章后接着加载第二章的内容,
+第一章
  ----第1节.
  ----第2节
  ----第3节
  ----quiz
+第二章
  ----第1节.
  ----第2节
  ----第3节
  ----quiz

(所有章节内容在后台已经预先加入数据库中)
急求各大侠解答,最好有Code 例子

------解决方案--------------------------------------------------------
在数据库里加一个权限字段,这样去筛选节点
------解决方案--------------------------------------------------------
对节点增加 PopulateOnDemand 属性为 true

示例代码(打开你本机的SQL Server服务可以运行):
C# code
<%@ Page Language="C#" %><%@ Import Namespace="System.Data" %><%@ Import Namespace="System.Data.SqlClient" %><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();        newNode.Text = row["CategoryName"].ToString();         newNode.Value = 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>  <body>    <form runat="server">          <h3>TreeView PopulateNodesFromClient Example</h3>          <asp:TreeView id="LinksTreeView"        Font-Name= "Arial"        ForeColor="Blue"        EnableClientScript="true"        PopulateNodesFromClient="true"          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>
  相关解决方案