Solución:
Acabo de pasar una hora en un problema similar. Para mí, la respuesta resultó ser vergonzosamente simple.
(dataGridViewFields.DataSource as DataTable).DefaultView.RowFilter = string.Format("Field = '{0}'", textBoxFilter.Text);
Desarrollé una declaración genérica para aplicar el filtro:
string rowFilter = string.Format("[{0}] = '{1}'", columnName, filterValue);
(myDataGridView.DataSource as DataTable).DefaultView.RowFilter = rowFilter;
Los corchetes permiten espacios en el nombre de la columna.
Además, si desea incluir varios valores en su filtro, puede agregar la siguiente línea para cada valor adicional:
rowFilter += string.Format(" OR [{0}] = '{1}'", columnName, additionalFilterValue);
Una forma más sencilla es atravesar los datos y ocultar las líneas con la Visible
propiedad.
// Prevent exception when hiding rows out of view
CurrencyManager currencyManager = (CurrencyManager)BindingContext[dataGridView3.DataSource];
currencyManager.SuspendBinding();
// Show all lines
for (int u = 0; u < dataGridView3.RowCount; u++)
{
dataGridView3.Rows[u].Visible = true;
x++;
}
// Hide the ones that you want with the filter you want.
for (int u = 0; u < dataGridView3.RowCount; u++)
{
if (dataGridView3.Rows[u].Cells[4].Value == "The filter string")
{
dataGridView3.Rows[u].Visible = true;
}
else
{
dataGridView3.Rows[u].Visible = false;
}
}
// Resume data grid view binding
currencyManager.ResumeBinding();
Solo una idea … funciona para mí.
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)