如果相應列未顯示在列標題面板中,則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));
}
));
}
是的,這就是我的想法:-( – EndangeringSpecies 2011-04-11 18:44:37