/// <summary>
        /// 创建下级菜单
        /// </summary>
        /// <param name="current">下级菜单的父节点</param>
        /// <param name="ParentPanel">下级菜单所在控件</param>
        /// <param name="ParentTop">下级菜单所在控件的头部</param>
        /// <param name="label">显示下级的‘+’号,目前后label,后期可能改成图片</param>
        private void createSubsetMenu(String current, PanelEx ParentPanel, PanelEx ParentTop, Label label)
        {
            int currentMenuLevel = menuLevel;               //记录当前菜单级别
            //找子集
            List <dynamic> menuList = new List <dynamic>(); //存子集

            foreach (dynamic menu in dataSourceList)
            {
                String menuParent = menu.GetType().GetProperty(parentFieldName).GetValue(menu, null);
                if (menuParent != null && menuParent.Equals(current))
                {
                    menuList.Add(menu);
                }
            }
            if (menuList.Count <= 0)
            {
                //没有子集的时候不显示+号
                label.Visible = false;
                Padding pd   = ParentTop.Padding;
                int     left = pd.Left;
                if (useZoom)
                {
                    left = pd.Left + 15;
                }
                ParentTop.Padding = new Padding(left, pd.Top, pd.Right, pd.Bottom);
                return;
            }
            else if (menuList.Count > 0)
            {
                //子菜单面板
                PanelEx p1 = new PanelEx();
                p1.BorderStyleTop    = ButtonBorderStyle.None;
                p1.BorderStyleBottom = ButtonBorderStyle.None;
                p1.BorderStyleLeft   = ButtonBorderStyle.None;
                p1.BorderStyleRight  = ButtonBorderStyle.None;
                p1.BorderColor       = Color.FromArgb(157, 160, 170);
                p1.Margin            = new Padding(0, 0, 0, 0);
                p1.Padding           = new Padding(0, 1, 0, 0);
                //panel23.Visible = false;
                p1.AutoSize = true;
                p1.Dock     = DockStyle.Top;

                //循环添加菜单
                foreach (dynamic menu in menuList)
                {
                    //子级菜单
                    PanelEx p2 = new PanelEx();//某个子集的面板
                    p2.BorderColor       = borderColor;
                    p2.BorderStyleTop    = ButtonBorderStyle.None;
                    p2.BorderStyleBottom = ButtonBorderStyle.None;
                    p2.BorderStyleRight  = ButtonBorderStyle.None;
                    p2.BorderStyleLeft   = ButtonBorderStyle.None;
                    p2.BackColor         = Color.Transparent;
                    p2.AutoSize          = true;
                    p2.Dock = DockStyle.Top;

                    PanelEx p3 = new PanelEx();//某个子集的选项头
                    p3.BorderColor       = borderColor;
                    p3.BorderStyleTop    = ButtonBorderStyle.None;
                    p3.BorderStyleBottom = ButtonBorderStyle.None;
                    p3.BorderStyleLeft   = ButtonBorderStyle.None;
                    p3.BorderStyleRight  = ButtonBorderStyle.None;
                    p3.BackColor         = Color.Transparent;
                    p3.Height            = MenuItemHeight;
                    p3.Dock = DockStyle.Top;

                    p3.Padding = new Padding((menuLevel - 1) * 15, 6, 1, 1);

                    Label l1 = new Label();//下拉收缩的控件
                    l1.Visible = useZoom;
                    l1.Text    = "-";
                    l1.Width   = 15;
                    l1.Font    = font;
                    l1.Dock    = DockStyle.Left;
                    l1.Click  += new EventHandler(ExpansionContractionClicked);
                    p3.Controls.Add(l1);

                    Label l2 = new Label();
                    //l2.BackColor = Color.Transparent;
                    l2.Font        = font;
                    l2.AutoSize    = true;
                    l2.Text        = menu.GetType().GetProperty(displayMember).GetValue(menu, null); //菜单显示的值
                    l2.Tag         = menu.GetType().GetProperty(valueMember).GetValue(menu, null);   //菜单对应的值
                    l2.Dock        = DockStyle.Left;
                    l2.MouseEnter += new EventHandler(LabelMouseEnter);
                    l2.MouseLeave += new EventHandler(LabelMouseLeave);
                    l2.Click      += new EventHandler(LabelMenuClicked);
                    p3.MouseEnter += new EventHandler(PanelMouseEnter);
                    p3.MouseLeave += new EventHandler(PanelMouseLeave);
                    p3.Click      += new EventHandler(PanelMenuClicked);
                    p3.Controls.Add(l2);
                    l2.BringToFront();
                    p2.Controls.Add(p3);
                    p1.Controls.Add(p2);
                    p2.BringToFront();

                    //创建下级菜单
                    menuLevel++;
                    current = menu.GetType().GetProperty(keyFieldName).GetValue(menu, null);
                    createSubsetMenu(current, p2, p3, l1);
                    menuLevel = currentMenuLevel;
                }
                ParentPanel.Controls.Add(p1);
                p1.BringToFront();
            }
        }
        /// <summary>
        /// 根据数据源生成界面
        /// </summary>
        private void createUI()
        {
            this.Controls.Clear();
            string type = dataSource.GetType().Name;

            switch (type)
            {
            case "DataSet":
                DataSet ds = (DataSet)dataSource;
                throw new ArgumentException("目前还不支持DataSet类型");

            //if (ds.Check())
            //{
            //    rp.DataSource = ds.Tables[0];
            //}
            //break;
            case "DataTable":
                DataTable dt = (DataTable)dataSource;
                throw new ArgumentException("目前还不支持DataTable类型");

            //if (dt.Rows.Count > 0)
            //{
            //    rp.DataSource = dt;
            //}
            //break;
            case "List`1":
                //第一步:找出一级菜单列表
                List <dynamic> dyList = new List <dynamic>();  //存一级菜单
                IEnumerable    list   = dataSource as IEnumerable;
                foreach (var item in list)
                {
                    dynamic temp = item;
                    dataSourceList.Add(item);
                    if (ifTopLevel(temp))
                    {
                        dyList.Add(temp);
                    }
                }
                //第二步:生成菜单控件
                //遍历生成一级菜单
                foreach (dynamic entity in dyList)
                {
                    //选项,包括该选项的所有字菜单
                    PanelEx p1 = new PanelEx();
                    p1.BorderColor       = borderColor;
                    p1.BorderStyleTop    = ButtonBorderStyle.None;
                    p1.BorderStyleBottom = ButtonBorderStyle.None;
                    p1.BorderStyleRight  = ButtonBorderStyle.None;
                    p1.BorderStyleLeft   = ButtonBorderStyle.None;
                    p1.BackColor         = Color.Transparent;
                    p1.AutoSize          = true;
                    p1.Dock = DockStyle.Top;
                    //当前选项头
                    PanelEx p2 = new PanelEx();
                    p2.BorderColor       = borderColor;
                    p2.BorderStyleTop    = ButtonBorderStyle.None;
                    p2.BorderStyleLeft   = ButtonBorderStyle.None;
                    p2.BorderStyleRight  = ButtonBorderStyle.None;
                    p2.BorderStyleBottom = ButtonBorderStyle.None;
                    p2.Margin            = new Padding(0, 0, 0, 0);
                    p2.Padding           = new Padding(0, 6, 0, 0);
                    p2.Height            = MenuItemHeight;
                    p2.Dock = DockStyle.Top;
                    Label l1 = new Label();    //下拉收缩的控件
                    l1.Visible = useZoom;
                    l1.Text    = "-";
                    l1.Width   = 15;
                    l1.Font    = font;
                    l1.Dock    = DockStyle.Left;
                    l1.Click  += new EventHandler(ExpansionContractionClicked);
                    p2.Controls.Add(l1);
                    //当前选项文本
                    Label l2 = new Label();
                    l2.Text        = entity.GetType().GetProperty(displayMember).GetValue(entity, null); //菜单显示的值
                    l2.Tag         = entity.GetType().GetProperty(valueMember).GetValue(entity, null);   //菜单对应的值
                    l2.Font        = font;
                    l2.Dock        = DockStyle.Left;
                    l2.MouseEnter += new EventHandler(LabelMouseEnter);
                    l2.MouseLeave += new EventHandler(LabelMouseLeave);
                    l2.Click      += new EventHandler(LabelMenuClicked);
                    p2.MouseEnter += new EventHandler(PanelMouseEnter);
                    p2.MouseLeave += new EventHandler(PanelMouseLeave);
                    p2.Click      += new EventHandler(PanelMenuClicked);
                    p2.Controls.Add(l2);
                    l2.BringToFront();
                    p1.Controls.Add(p2);

                    //创建下级菜单
                    menuLevel++;
                    String current = entity.GetType().GetProperty(keyFieldName).GetValue(entity, null);
                    createSubsetMenu(current, p1, p2, l1);
                    menuLevel = 1;

                    this.Controls.Add(p1);
                    p1.BringToFront();
                }
                break;

            default:
                break;
            }
        }