2011-04-20 58 views
2

我能够以编程方式选择并展开到特定的树节点,但无法刷新它以反映表中最新的数据。有没有Treeview1.Refresh()方法?或类似的东西来影响?任何帮助将不胜感激。我有一个树形视图,我通过让用户输入数据并单击按钮将父节点添加到父节点。在完成插入后,我想要父节点刷新并显示所有子条目。刷新Treenode父节点以显示当前最新的子节点

protected void PopulateNode(Object sender, TreeNodeEventArgs e) 
{ 

    switch (e.Node.Depth) 
    { 
     case 0: 
      PopulateChild(e.Node); 
      break; 

     default: 
      //PopulateChild(e.Node); 
      break; 
    } 

} 

protected void PopulateChild(TreeNode node) 
{ 

    DataSet ResultSet = RunQuery("Select Id From tbl"); 

    if (ResultSet.Tables.Count > 0) 
    { 
     foreach (DataRow row in ResultSet.Tables[0].Rows) 
     { 
      TreeNode newNode = new TreeNode(); 
      newNode.Text = row["Id"].ToString(); 
      newNode.Value = row["Id"].ToString(); 
      newNode.PopulateOnDemand = true; 
      newNode.SelectAction = TreeNodeSelectAction.Expand; 
      node.ChildNodes.Add(newNode); 
     } 

    } 

} 

DataSet RunQuery(String QueryString) 
{ 
    String ConnectionString = "asdasdasdasd"; 




    OleDbConnection DBConnection = new OleDbConnection(ConnectionString); 
    OleDbDataAdapter DBAdapter; 
    DataSet ResultsDataSet = new DataSet(); 

    try 
    { 

     DBAdapter = new OleDbDataAdapter(QueryString, DBConnection); 
     DBAdapter.Fill(ResultsDataSet); 


     DBConnection.Close(); 

    } 
    catch (Exception ex) 
    { 


     if (DBConnection.State == ConnectionState.Open) 
     { 
      DBConnection.Close(); 
     } 

    } 

    return ResultsDataSet; 

} 

回答

0

唯一的选择是重新加载数据表,并重新创建节点这里http://www.tek-tips.com/faqs.cfm?fid=6177

与树视图的工作,最好的办法是XMLDataSource。您可以绑定TreeView并重新绑定它,而不是循环遍历行/列和创建每个节点。

编号:http://quickstarts.asp.net/QuickStartv20/aspnet/doc/ctrlref/navigation/treeview.aspx


This link让您和理念转换other datasource to XMLDataSource,然后用它来绑定到treeviewl:

一旦你有了树形视图结合xmldatasbource,您需要刷新您的数据源和然后使用DataBind()进行树视图。

<datasource>.DataBind() 
treeview1.DataBind() 

另外,为objectdatasource设置EnableCaching = false

http://forums.asp.net/p/1083582/1609724.aspx

+0

我从来没有使用过XMLdatasources。但你绝对可以解决我的问题。谢谢。但我想找出一种方法,无需转换或使用XML数据源。可能是如果我一天没有其他选择,我会采取你的解决方案。再次感谢您,如果您有任何其他想法,请与我分享..真的很感谢您的帮助 – Saks 2011-04-20 16:35:27

0

TreeView您使用具有这是对任何事件都在TreeNodeTreeNodeSelectAction属性的值指定触发的事件SelectedNodeChanged。在你的情况下,值是Expand,因为我可以在你的代码中看到。

当你展开一个节点时,SelectedNodeChanged被触发,并按PopulateNode函数处理,如在html中分配的OnSelectedNodeChanged属性所指定的那样。


我们可以在这里做包括:

A-崩溃如果已经展开,然后展开树节点重新填充其子..

B-的TreeNodeSelectAction属性值更改为SelectExpand。在这里我们还有另一种情况,其中节点将被重新填充,并且是节点选择。

C-呼叫PopulateNode功能,每当我们需要和分配TreeNode对象的sender参数和new TreeNodeEventArgs()e参数。


参考文献:

TreeNodeSelectAction EnumerationTreeView.TreeNodePopulate EventTreeNode.SelectAction Property

+0

@Saks:现在就是您的答案.. – 2011-04-20 17:29:07

相关问题