【问题标题】:Refresh Treenode parent to show most current child nodes刷新 Treenode 父节点以显示最新的子节点
【发布时间】:2011-04-20 15:40:17
【问题描述】:

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

  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;

}

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

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

    使用 Treeview 的最佳方式是使用 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

    【讨论】:

    • 我以前从未使用过 XMLdatasources。但你肯定会为我的问题提供解决方案。谢谢你。但我想找出一种无需转换或使用 XMLdatasource 的方法。可能如果我一天结束时没有其他选择,我会接受你的解决方案。再次感谢您,如果您有任何其他想法,请与我分享..非常感谢您的帮助
    【解决方案2】:

    您正在使用的TreeView 有一个事件SelectedNodeChanged,该事件会在该TreeNodeTreeNodeSelectAction 属性值中指定的任何事件上触发。在您的情况下,值是 Expand,正如我在您的代码中看到的那样。

    当您展开节点时,PopulateNode 函数会触发并处理 PopulateNode 函数,该函数由 html 中分配的 OnSelectedNodeChanged 属性指定。


    我们可以在这里做的包括:

    A- 如果已经展开则折叠然后展开树节点以重新填充其子节点..

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

    C- 在需要时调用PopulateNode 函数并将TreeNode 对象分配给它的sender 参数,并将new TreeNodeEventArgs() 分配给它的e 参数。


    参考资料:

    TreeNodeSelectAction Enumeration, TreeView.TreeNodePopulate Event, TreeNode.SelectAction Property

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-23
      • 1970-01-01
      相关资源
      最近更新 更多