Devexpress 在XtraGrid GridView中,有没有一种方便的方法可以按组列进行过滤而不显示该列?

Devexpress 在XtraGrid GridView中,有没有一种方便的方法可以按组列进行过滤而不显示该列?,devexpress,xtragrid,Devexpress,Xtragrid,这是我上一个问题的继续 我被告知要将GridView.options.view.ShowGroupedColumns设置为true,但这太糟糕了。我不想在显示组列的网格中浪费水平空间——将它们显示为组标题就足够了。我只想为顶部的那些列设置漂亮的过滤文本框 除了滚动我自己的建议之外,还有其他建议吗?XtraGrid无法在“组”列后面显示自动筛选编辑器,如果列标题面板中未显示相应的列。一种可能的解决方案是在网格附近显示一个外部编辑器。另一个解决方案是在组列标题的位置显示编辑器。在这种情况下,您必须自

这是我上一个问题的继续

我被告知要将GridView.options.view.ShowGroupedColumns设置为true,但这太糟糕了。我不想在显示组列的网格中浪费水平空间——将它们显示为组标题就足够了。我只想为顶部的那些列设置漂亮的过滤文本框


除了滚动我自己的建议之外,还有其他建议吗?

XtraGrid无法在“组”列后面显示自动筛选编辑器,如果列标题面板中未显示相应的列。一种可能的解决方案是在网格附近显示一个外部编辑器。另一个解决方案是在组列标题的位置显示编辑器。在这种情况下,您必须自己实现过滤和管理编辑器。大概是这样的:

using DevExpress.XtraGrid.Views.Grid;
using DevExpress.XtraGrid.Views.Grid.ViewInfo;
using DevExpress.XtraGrid.Columns;
using DevExpress.XtraEditors;
using DevExpress.XtraGrid.Drawing;
using DevExpress.Data.Filtering;


        private void gridView1_Click(object sender, EventArgs e) {
            MouseEventArgs args = e as MouseEventArgs;
            GridView view = sender as GridView;
            GridHitInfo hitInfo = view.CalcHitInfo(args.X, args.Y);
            if(hitInfo.InGroupColumn) {
                ShowFilterEditor(hitInfo.Column);
            }
        }

        private void ShowFilterEditor(GridColumn gridColumn) {
            GridView gridView = gridColumn.View as GridView;
            GridViewInfo vInfo = gridView.GetViewInfo() as GridViewInfo;
            for(int i = 0; i < vInfo.GroupPanel.Rows.Count; i++) 
                for(int j = 0; j < vInfo.GroupPanel.Rows[i].ColumnsInfo.Count; j ++) {
                    GridColumnInfoArgs columnInfo = vInfo.GroupPanel.Rows[i].ColumnsInfo[gridColumn];
                    if(columnInfo != null) {
                        Rectangle columnRect = columnInfo.CaptionRect;
                        TextEdit edit = new TextEdit();
                        gridControl1.Controls.Add(edit);
                        edit.SetBounds(columnRect.Left, columnRect.Top, columnRect.Width, columnRect.Height);
                        edit.Focus();
                        edit.KeyPress += new KeyPressEventHandler(edit_KeyPress);
                        edit.KeyDown += new KeyEventHandler(edit_KeyDown);
                        edit.Disposed += new EventHandler(edit_Disposed);
                        edit.Tag = gridColumn;
                        return;
                    }
            }
        }

        void edit_Disposed(object sender, EventArgs e) {
            TextEdit edit = sender as TextEdit;
            edit.KeyPress -= new KeyPressEventHandler(edit_KeyPress);
            edit.KeyDown -= new KeyEventHandler(edit_KeyDown);
            edit.Disposed -= new EventHandler(edit_Disposed);
            edit.Tag = null;

        }

        void edit_KeyDown(object sender, KeyEventArgs e) {
            if(e.KeyCode == Keys.Return)
                BeginInvoke(new MethodInvoker(delegate { (sender as TextEdit).Dispose(); }));
        }

        void edit_KeyPress(object sender, KeyPressEventArgs e) {
            BeginInvoke(new MethodInvoker(delegate {
                TextEdit edit = sender as TextEdit;
                if(edit.IsDisposed)
                    return;
                GridColumn column = edit.Tag as GridColumn;
                column.FilterInfo = new ColumnFilterInfo(new BinaryOperator(column.FieldName, string.Format("%{0}%",  edit.Text), BinaryOperatorType.Like));
            }
            ));
        }
使用DevExpress.XtraGrid.Views.Grid;
使用DevExpress.XtraGrid.Views.Grid.ViewInfo;
使用DevExpress.XtraGrid.Columns;
使用DevExpress.XtraEditors;
使用DevExpress.XtraGrid.Drawing;
使用DevExpress.Data.Filtering;
私有void gridView1_单击(对象发送方,事件参数e){
MouseEventArgs args=e作为MouseEventArgs;
GridView视图=发送方作为GridView;
GridHitInfo-hitInfo=view.CalcHitInfo(args.X,args.Y);
if(hitInfo.InGroupColumn){
ShowFilterEditor(hitInfo.列);
}
}
私有void ShowFilterEditor(GridColumn GridColumn){
GridView GridView=gridColumn.View为GridView;
GridViewInfo vInfo=gridView.GetViewInfo()作为GridViewInfo;
对于(int i=0;i
是的,我也是这么想的:-(