刷新Treenode父级以显示最新的子节点

时间:2011-04-20 15:40:17

标签: c# asp.net

我能够以编程方式选择并扩展到特定树节点,但无法刷新它以反映表中的大多数当前数据。有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;

}

2 个答案:

答案 0 :(得分:0)

唯一的选择是重新加载数据表并重新创建节点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的想法:

将treeview绑定到xmldatasbource后,需要刷新数据源,然后使用DataBind()刷新树视图。

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

另外,为objectdatasource设置EnableCaching = false

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

答案 1 :(得分:0)

您正在使用的TreeView有一个事件SelectedNodeChanged,该事件会针对该TreeNodeSelectAction的{​​{1}}属性值中指定的任何事件触发。在您的情况下,我可以在您的代码中看到值TreeNode

展开节点时,Expand会被SelectedNodeChanged函数触发并处理,该函数由html中指定的PopulateNode属性指定。


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

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

B-将OnSelectedNodeChanged属性值更改为TreeNodeSelectAction。在这里,我们还有一个案例,其中节点将被重新填充,即节点选择。

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


参考文献:

TreeNodeSelectAction EnumerationTreeView.TreeNodePopulate EventTreeNode.SelectAction Property