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);
    }
 }

如果有任何问题,请询问,任何类型的建议都将被接受提前谢谢

4

3 回答 3

2

不可以,您不能向现有事件添加参数。如果可以的话,你将如何传递一个值?

您已经存储row.ID在 Value 属性中,这是检索特定 TreeNode 信息的正确方法。因此,找到一种方法将您的数据存储在其他地方,并使其可以在 RowId 上访问。

于 2013-03-18T08:38:14.763 回答
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)
            };
    }
于 2013-03-18T09:25:15.000 回答
-1
private void setup(string someData)
{
     Object.assignHandler((sender) => evHandler(sender,someData));
}
public void evHandler(Object sender, string someData)
{
    // need someData here!!!
}
于 2013-03-18T08:31:22.970 回答