2008-09-30 6 views
0

J'ai un DataSet qui contient quelques colonnes. Une de ces colonnes est un nombre - la plupart du temps. Comme il s'agit parfois d'une chaîne, dans la base de données, il s'agit d'une colonne varchar (10). Toutefois, lorsque vous triez une colonne varchar, elle la trie comme une chaîne. Ce que je veux faire à la place est d'essayer de surcharger cela de telle sorte qu'il trie les entiers comme des entiers; Ce n'est pas si difficile, et j'ai déjà une fonction qui le fait ailleurs dans mon code. Cependant, je ne pense pas qu'il soit possible de donner un DataSet typé comme j'ai un type personnalisé avec sa propre implémentation de tri, et d'après ce que je peux voir, BindingSource ne pense pas du tout aux colonnes, ce qui rend le tri difficile leur. Je peux facilement le faire en utilisant la fonctionnalité de tri ListView/DataGridView - mais je voudrais que l'affichage soit en mode virtuel en raison de la quantité de données que j'ai, et pour cela je dois quand même fournir mon propre tri.Tri personnalisé d'une colonne DataSet

Y at-il un moyen de faire ce que je veux faire?

Répondre

2

Je pense que votre meilleur pari est d'ajouter une nouvelle colonne calculée qui convertit le varchar (10) à un int, et trier sur cela.

myDataTable.Columns.Add("Sorter", typeof(System.Int32), "Convert(TextColumn, 'System.Int32')"); 

Cela lancer des exceptions lorsque la chaîne dans votre colonne varchar (que j'ai parlé comme « TextColumn » dans le code ci-dessus), mais vous pourrez peut-être travailler autour de ce en utilisant une fonction IIF() appeler dans l'expression.

Questions connexes