2011-04-20 77 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

相關問題