2010-02-02 4 views
0

J'ai un datatable qui contient plusieurs colonnes dont trois sont les principaux:s'il vous plaît me aider à créer une expression de tri pour datatable dans vb.net

  1. hotelid
  2. dshotelid
  3. hotelName

Certains hôtels ne contiennent que dshotelid, certains ne contiennent que l'hotelid et certains contiennent à la fois dshotelid et hotelid.

J'ai besoin genre de telle manière afin que les hôtels qui ont obtenu les deux dshotelid et hotelid devraient être sur le dessus et les hôtels qui ont obtenu que dshotelid et enfin ces hôtels qui ont obtenu que hotelid ...

Aidez-moi s'il vous plaît à créer une telle expression de tri.

J'ai créé ceci:

dtmaintable.DefaultView.Sort = "dshotelid, hotelid" 

mais il ne me donne pas la sortie désirée.

+0

Essayez cette question avant: http: // stackoverflow.com/questions/582374/dataview-tri-plus-que-juste-asc-desc-besoin-personnalisé-tri – roufamatic

+0

son ne fonctionne pas –

+0

Avez-vous déjà vu ma réponse à votre solution FilterAndSortTable? Voir la partie modifiée de ma réponse ci-dessous .. – GenericMeatUnit

Répondre

0

j'ai obtenu la réponse de son:

datagrid1.datasource = FilterandSortTable(dtmaintable,"", "dshotelid desc, hotelid desc") 

Public Shared Function FilterandSortTable(ByVal SourceTable As DataTable, ByVal strFilters As String, Optional ByVal strOrder As String = "") As DataTable 
    Dim Tbl As DataTable = SourceTable.Clone 
    Dim rows() As DataRow = SourceTable.Select(strFilters, strOrder) 
    For i As Integer = 0 To rows.Length - 1 
     Tbl.ImportRow(rows(i)) 
    Next 
    Return Tbl 
End Function 
+0

bien qu'il me donne la sortie désirée mais, s'il vous plaît vérifier et me confirmer que je l'ai fait corriger ou non ... –

+0

J'ai ammended ma réponse précédente pour parler de cette solution. – GenericMeatUnit

1

Les champs avec NULL ont tendance à apparaître en haut des colonnes triées (à moins que le tri ne soit dans l'ordre décroissant). Vous voyez donc probablement des lignes contenant à la fois hotelid et dshotelid au lieu de top?

Comment cette table de données est-elle remplie? Si cela provient d'une requête de base de données, il est simple de construire une ou plusieurs colonnes supplémentaires qui contiennent la clé de tri dont vous avez besoin - qu'il s'agisse d'un amalgame d'autres colonnes ou d'un autre identifiant unique.

EDIT: 4 février 2010 - en réponse à votre solution « FilterAndSortTable »:

Votre solution fonctionne mais pas à cause de la FilterAndSortTable - c'est parce que vous avez utilisé un ordre de tri différent.

À l'origine, vous utilisiez "dsohtelid, hotelid".

La deuxième fois, vous avez utilisé "dshotelid desc, hotelid desc".

Cela a pour effet de mettre vos non-nulls en haut et les nulls en bas, mais je contesterais que cela se qualifie comme une bonne solution. Vos identifiants sont maintenant triés à l'envers - ce que je suppose que vous pourriez vouloir éviter, d'où ma suggestion d'une nouvelle colonne de tri qui respecterait cela.

Pourtant, si l'ordre des ids n'a pas d'importance, votre solution est très bien et vous pouvez simplement coller avec votre code d'origine, avec l'ajout de « desc », comme ceci:

dtmaintable.DefaultView.Sort = "dshotelid desc, hotelid desc" 

Bien sûr Si quelque chose que j'ai dit ici vous a été utile, une tique serait grandement appréciée. Cela m'aiderait à atteindre 50 points de repêchage et enfin à pouvoir écrire des commentaires. :)

+0

merci mais .. il n'a pas résolu mon problème –

+0

l'ordre d'id n'est pas grave pour moi .... et mes solutions fonctionne bien –

+0

Merci pour l'upvote. :) – GenericMeatUnit

Questions connexes