Filtrage d'un DataGridView par colonne avec les filtres visibles au-dessus des colonnes

J'ai une assez requête spécifique -

Je veux être en mesure de récupérer des données à partir d'une base de données, de les afficher dans un DataGridView et permettre à l'utilisateur de filtrer les colonnes par la saisie de simples requêtes de filtre au-dessus de chaque colonne.

Par exemple:-

        | Foo   | Bar                 | Baz |
        ------------------------------------|
Filters | > 10  | 1/1/1980 - 1/1/2009 | Boo |
        | 12    | 1/3/1995            | Boo |
        | 99    | 5/12/2005           | Boo |
                     etc.

La méthode que j'ai pensé serait la meilleure façon de traiter ce problème est d'avoir deux tables de données, qui agit comme source de données pour le DataGridView (pour que je puisse avoir le point de vue de générer automatiquement les colonnes et ne pas avoir à écrire tout un tas de réutilisable pour insérer des lignes de moi-même), qui se compose d'une seule ligne à tenir les filtres et les données de base de données ci-dessous, et la deuxième tenue de la base de données qui peut être par programme ajoutée à la première.

Le problème avec cette solution est que les colonnes sont limitées dans le type de la colonne, par exemple ici Foo est un entier, le Bar est un DateTime et Baz est une chaîne de caractères. Lorsque vous essayez d'entrer filtre de texte dans Foo Bar ou le DataGridView renvoie une erreur indiquant que la cellule ne peut pas contenir de texte.

Est-il possible d'avoir une ligne contenant des types totalement séparé de les types des colonnes du reste de la table?

Une autre solution pourrait être d'avoir des zones de texte s'assit dessus de la grille, synchronisés avec la colonne d'ajout, de retrait, de redimensionnement et de l'utilisateur de défilement, toutefois, cela semble une énorme quantité de travail et de savoir WinForms, je serais probablement trouver 3 jours que cette approche ne permet pas de façon spectaculaire en raison de certaines subtile WinForms limitation.

Des Solutions qui ne sont pas possibles - l'utilisation de WPF, à l'aide d'un 3e partie DataGridView (sauf, peut-être, un OSS DGV avec un commercial de licence d'utilisation).

Actuellement, il semble que la meilleure solution serait peut-être à l'importation de toutes les données dans la base de données datatable comme des chaînes de caractères (les données ci-dessous les filtres est en lecture seule). Qui semble tout à fait ahurissant de hackish, cependant.

Ai-je raté quelque chose de simple et d'évident ici? Je suis heureux d'avoir tort si il me donne une certaine façon d'avancer! 🙂

OriginalL'auteur ljs | 2009-08-26