Saltar al contenido

Filtrar DataGridView sin cambiar la fuente de datos

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)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *