using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Data; using System.Linq; using System.Text; using System.Windows.Forms; namespace EgoCtfEditor { public partial class DGVColumnFilterContextControl : UserControl { private int colIndex; private DataGridView dgv; private ToolStripDropDown popup; public DGVColumnFilterContextControl(DataGridView dgv, int colIndex) { InitializeComponent(); this.colIndex = colIndex; this.dgv = dgv; popup = new ToolStripDropDown(); popup.Margin = Padding.Empty; popup.Padding = Padding.Empty; ToolStripControlHost host = new ToolStripControlHost(this); host.Margin = Padding.Empty; host.Padding = Padding.Empty; popup.Items.Add(host); // Setup LostFocus += new EventHandler(DGVColumnFilterContextControl_LostFocus); dgv.ColumnHeaderMouseClick += new DataGridViewCellMouseEventHandler(dgv_ColumnHeaderMouseClick); } void DGVColumnFilterContextControl_LostFocus(object sender, EventArgs e) { popup.Hide(); } void dgv_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e) { if (e.ColumnIndex == colIndex) { int xPos = dgv.TopLeftHeaderCell.Size.Width; for (int i = 0; i <= colIndex; i++) { xPos += dgv.Columns[i].HeaderCell.Size.Width; } popup.Show(dgv, xPos, dgv.Columns[e.ColumnIndex].HeaderCell.ContentBounds.Top); filterTextBox.SelectAll(); filterTextBox.Focus(); } } private void filterTextBox_TextChanged(object sender, EventArgs e) { // Unsubscribe from event while filter is working //filterTextBox.TextChanged -= filterTextBox_TextChanged; List<DataGridViewRow> rows = new List<DataGridViewRow>(); foreach (DataGridViewRow row in dgv.Rows) { rows.Add(row); } dgv.SuspendDrawing(); dgv.Rows.Clear(); foreach (DataGridViewRow row in rows) { row.Visible = false; if (((string)row.Cells[colIndex].Value).StartsWith(filterTextBox.Text, StringComparison.CurrentCultureIgnoreCase) || ((string)row.Cells[colIndex].Value).Contains(filterTextBox.Text.ToLower())) { row.Visible = true; } } dgv.Rows.AddRange(rows.ToArray()); dgv.ResumeDrawing(); //filterTextBox.TextChanged +=new EventHandler(filterTextBox_TextChanged); } private void filterTextBox_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Return) { popup.Hide(); } } private void addButton_Click(object sender, EventArgs e) { popup.Hide(); } private void deleteButton_Click(object sender, EventArgs e) { dgv.ColumnHeaderMouseClick -= dgv_ColumnHeaderMouseClick; filterTextBox.Text = ""; dgv.ColumnHeaderMouseClick += new DataGridViewCellMouseEventHandler(dgv_ColumnHeaderMouseClick); List<DataGridViewRow> rows = new List<DataGridViewRow>(); foreach (DataGridViewRow row in dgv.Rows) { rows.Add(row); } dgv.SuspendDrawing(); dgv.Rows.Clear(); foreach (DataGridViewRow row in rows) row.Visible = true; dgv.Rows.AddRange(rows.ToArray()); dgv.ResumeDrawing(); popup.Hide(); } } }