2013-03-18 41 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) 
      }; 
    }