在DevExpress里面的ASPxGridView里面怎么实现级联下拉菜单效果呀,怎么实现拉,望哪位高手指点一下呀,感激不尽。

解决方案 »

  1.   

    这几天我也在做这东西:嘻嘻前台代码:
     <dx:ASPxGridView ID="dDgvMenuList" runat="server" SkinID="agview" KeyFieldName="Id"
                AutoGenerateColumns="False" Width="100%" 
                onbeforecolumnsortinggrouping="dDgvMenuList_BeforeColumnSortingGrouping" 
                onrowupdating="dDgvMenuList_RowUpdating">
                   <SettingsPager SEOFriendly="Enabled" PageSize="5">
                                <FirstPageButton Visible="True" Text="首页">
                                </FirstPageButton>
                                <LastPageButton Visible="True" Text="尾页">
                                </LastPageButton>
                                <NextPageButton Text="下一页">
                                </NextPageButton>
                                <PrevPageButton Text="前一页">
                                </PrevPageButton>
                        <Summary AllPagesText="页: {0} / {1} ({2}行)" />
                    </SettingsPager>
                    <SettingsBehavior AllowSelectByRowClick="true" />
                <Templates>
                    <DetailRow>
                        <dx:ASPxGridView ID="dDgvMenuChildList" runat="server" KeyFieldName="Id"
                            ondatabinding="dDgvMenuChildList_DataBinding"> 
                            <SettingsDetail IsDetailGrid="True" />
                              <Columns>                            <dx:GridViewCommandColumn VisibleIndex="1">
                                    <EditButton Text="编 辑" Visible ="true" />
                                </dx:GridViewCommandColumn>
                                <dx:GridViewDataTextColumn Caption="菜单名称" VisibleIndex="2" FieldName="Name">
                                </dx:GridViewDataTextColumn>
                                <dx:GridViewDataTextColumn Caption="菜单类别" FieldName="Type" VisibleIndex="2">
                                </dx:GridViewDataTextColumn>
                                <dx:GridViewDataTextColumn Caption="排序" FieldName="OrderID" VisibleIndex="3">
                                </dx:GridViewDataTextColumn>
                                <dx:GridViewDataTextColumn Caption="地址" FieldName="PathURL" VisibleIndex="4">
                                </dx:GridViewDataTextColumn>
                                <dx:GridViewDataTextColumn Caption="图片路径" FieldName="Img" VisibleIndex="6">
                                </dx:GridViewDataTextColumn>
                                <dx:GridViewDataTextColumn Caption="是否显示" FieldName="IsView" VisibleIndex="5">
                                </dx:GridViewDataTextColumn >
                            </Columns>
                        </dx:ASPxGridView>
                    </DetailRow>
                </Templates>
                <Columns>
                        <dx:GridViewCommandColumn ShowSelectCheckbox="true" VisibleIndex="0">
                            <HeaderTemplate>
                               <input id="chkChoose" type="checkbox" onclick="dDgvMenuList.SelectAllRowsOnPage(this.checked);"  title="全选/全不选"/>全选/全不选
                            </HeaderTemplate>                       
                        </dx:GridViewCommandColumn>
                            <dx:GridViewCommandColumn VisibleIndex="1">
                                <EditButton Text="编 辑" Visible ="true" />
                            </dx:GridViewCommandColumn>
                            <dx:GridViewDataTextColumn Caption="菜单名称" VisibleIndex="2" FieldName="Name">
                            </dx:GridViewDataTextColumn>
                            <dx:GridViewDataTextColumn Caption="菜单类别" FieldName="Type" VisibleIndex="2">
                            </dx:GridViewDataTextColumn>
                            <dx:GridViewDataTextColumn Caption="排序" FieldName="OrderID" VisibleIndex="3">
                            </dx:GridViewDataTextColumn>
                            <dx:GridViewDataTextColumn Caption="地址" FieldName="PathURL" VisibleIndex="4">
                            </dx:GridViewDataTextColumn>
                            <dx:GridViewDataTextColumn Caption="图片路径" FieldName="Img" VisibleIndex="6">
                            </dx:GridViewDataTextColumn>
                            <dx:GridViewDataTextColumn Caption="是否显示" FieldName="IsView" VisibleIndex="5">
                            </dx:GridViewDataTextColumn >
                </Columns>
            </dx:ASPxGridView>
    后台代码:
     protected void Page_Load(object sender, EventArgs e)
            {
                if (!Page.IsPostBack)
                { 
                    // 允许展开主表,显示从表的详细信息,打开第二条主表信息,第一条关闭
                    dDgvMenuList.SettingsDetail.AllowOnlyOneMasterRowExpanded = true;
                    dDgvMenuList.SettingsDetail.ShowDetailButtons = true;
                    dDgvMenuList.SettingsDetail.ShowDetailRow = true;
                    BindData();
                    dDgvMenuList.ExpandRow(0);
                }
            }
            
            protected void BindData() {
                _menuBLL.ClearCriteria();
                int printID = 0;
                string menuName = MenuSearchControl1.MenuName;
                string menuid = MenuSearchControl1.MenuID;
                int menutype = MenuSearchControl1.MenuType;
            //    bool isview = MenuSearchControl1.IsView;
                if (!string.IsNullOrEmpty(menuName))
                {
                    _menuBLL.AddCondition(PRestrictions.Eq("Name", menuName));
                }
                if (menutype!=0)
                {
                    _menuBLL.AddCondition(PRestrictions.Eq("Type", menutype));
                }
                else
                {
                    _menuBLL.AddCondition(PRestrictions.Eq("Type", 1));
                }
               
                if (!string.IsNullOrEmpty(menuid))
                {
                    _menuBLL.AddCondition(PRestrictions.Eq("ID", menuid));
                }
                _menuBLL.AddCondition(PRestrictions.Eq("ParentID", printID));
                dDgvMenuList.DataSource = _menuBLL.List();
                dDgvMenuList.DataBind();        }        protected void dDgvMenuChildList_DataBinding(object sender, EventArgs e)
            {
                DevExpress.Web.ASPxGridView.ASPxGridView grid = sender as DevExpress.Web.ASPxGridView.ASPxGridView;
                if ((grid != null) && (_menuBLL.List() != null))
                {
                    //取主表记录的Key,主表必须设定KeyFieldName
                    int i = (int)grid.GetMasterRowKeyValue();
                    if (i >= 0)
                    {
                        //通过Key定位数据,指定子表数据源 
                        _menuBLL.AddCondition(PRestrictions.Eq("ParentID", i));
                        grid.DataSource = _menuBLL.List();
                    }
                }
            }        protected void btnDelMenu_Click(object sender, EventArgs e)
            {
                List<object> values = this.dDgvMenuList.GetCurrentPageRowValues("Id");
                List<object> uvalues = dDgvMenuList.GetSelectedFieldValues(new string[] { dDgvMenuList.KeyFieldName });
                for (int i = 0; i < uvalues.Count; i++)
                { //获取主键值
                    int menuid = Convert.ToInt32(uvalues[i]);
                    _menuBLL.Delete(_menuBLL.Get<Point.Data.Domain.Menu>(menuid));
                }
                BindData();
            }        protected void dDgvMenuList_BeforeColumnSortingGrouping(object sender, DevExpress.Web.ASPxGridView.ASPxGridViewBeforeColumnGroupingSortingEventArgs e)
            {
                dDgvMenuList.KeyFieldName = "Id";
                BindData();
            }
            protected void dDgvMenuList_RowUpdating(object sender, DevExpress.Web.Data.ASPxDataUpdatingEventArgs e)
            {
                string id = dDgvMenuList.GetSelectedFieldValues(new string[] { dDgvMenuList.KeyFieldName })[0].ToString();
                int menuid = Convert.ToInt32(id);
                var menu = _menuBLL.Get<Point.Data.Domain.Menu>(menuid);            menu.Name = e.NewValues["Name"].ToString();
                menu.PathURL = e.NewValues["PathURL"].ToString();
                menu.OrderID = Convert.ToInt32(e.NewValues["OrderID"]);
                menu.IsView = Convert.ToBoolean(e.NewValues["OrderID"]);
                menu.Img = e.NewValues["Img"].ToString();
                menu.Type =(MeunType) e.NewValues["Type"];
                _menuBLL.Update(menu);
                dDgvMenuList.CancelEdit();
                e.Cancel = true;
                BindData();
            }