2013-03-18 55 views
1

需要使用此事件處理程序傳遞參數,是否可以使用事件處理程序發送參數?請檢查我的RadTreeView2_NodeExpand語法。如何通過控件事件傳遞參數?

internal void LoadTree(RadTreeView treeView, System.Collections.IEnumerable r) 
{ 
    LoadRootNodes(ref treeView, TreeNodeExpandMode.ServerSideCallBack, r); 
    treeView += RadTreeView2_NodeExpand(r); 
} 

public void RadTreeView2_NodeExpand(object sender, RadTreeNodeEventArgs e, System.Collections.IEnumerable r) 
{       
    if (e.Node.Nodes.Count == 0) 
     PopulateNodeOnDemand(e, TreeNodeExpandMode.ServerSide, r); 
} 

private static void PopulateNodeOnDemand(RadTreeNodeEventArgs e, TreeNodeExpandMode expandMode, System.Collections.IEnumerable r) 
{ 
    //List<testTable> data = GetChildNodes(e.Node.Value); 

    foreach (testTable row in r) 
    { 
     RadTreeNode node = new RadTreeNode(); 
     node.Text = row.Address;//row["Title"].ToString(); 
     node.Value = row.ID; //row["CategoryId"].ToString(); 
     //if (Convert.ToInt32(row["ChildrenCount"]) > 0) 
     //{ 
     // node.ExpandMode = expandMode; 
     //} 
     e.Node.Nodes.Add(node); 
    } 

    e.Node.Expanded = true; 
}  

private static void LoadRootNodes(ref RadTreeView treeView, TreeNodeExpandMode expandMode, System.Collections.IEnumerable data) 
{ 
    //DataTable data = GetData(new SqlCommand("SELECT * FROM ProductCategories WHERE ParentId IS NULL")); 

    foreach (testTable row in data) 
    { 
     RadTreeNode node = new RadTreeNode(); 
     node.Text = row.Address;//row["Title"].ToString(); 
     node.Value = row.ID;//row["CategoryId"].ToString(); 
     node.ExpandMode = expandMode; 
     treeView.Nodes.Add(node); 
    } 
} 

如果有任何疑問,請向任何類型暗示將提前

+2

有什麼問題? – TalentTuner 2013-03-18 08:30:25

回答

-1
private void setup(string someData) 
{ 
    Object.assignHandler((sender) => evHandler(sender,someData)); 
} 
public void evHandler(Object sender, string someData) 
{ 
    // need someData here!!! 
} 
+0

什麼..... ?????????? – TalentTuner 2013-03-18 08:31:55

+0

對不起....... :( – Nildarar 2013-03-18 08:41:52

2

沒有被接受,謝謝,你不能將參數添加到現有的事件。如果可以的話,你會如何傳遞價值?

您已經將row.ID存儲在Value屬性中,這是檢索特定TreeNode的信息的正確方法。因此,找到一種方法將數據存儲在別處,並使其可以在RowId上訪問。

+0

Henk Holterman,謝謝你的答覆。請檢查我的語法,它是一個Web應用程序,所以我不能將我的價值存儲在控制標記中,我不喜歡在會話中存儲我的價值所以參數的基本委託控制事件可以很容易地做到這一點 – shamim 2013-03-18 08:46:23

+0

_i不喜歡將我的價值存儲在session_聽起來像一個弱論點,你寧願把它作爲HTML泵送給客戶端嗎? – 2013-03-18 08:53:40

1

也許你可以嘗試這樣的事情。但請注意您的Enumerable將綁定到事件綁定上。

internal void LoadTree(RadTreeView treeView, System.Collections.IEnumerable r) 
    { 
     var enumerable = r as object[] ?? r.Cast<object>().ToArray(); 
     LoadRootNodes(ref treeView, TreeNodeExpandMode.ServerSideCallBack, enumerable); 
     treeView.NodeExpand += (s, e) => 
      { 
      if (e.Node.Nodes.Count == 0) 
       PopulateNodeOnDemand(e, 
            TreeNodeExpandMode.ServerSide, 
            enumerable) 
      }; 
    }