Bonjour à tous,

En fait, j'ai une question simple pour vous (pas pour moi...) :

J'ai une fonction qui extrait des données d'une DataTable en fonction des paramètres qu'on lui passe (Table depuis laquelle on veut extraire des données, numéro du champ à filtrer dans la Table, valeur du filtre, numéro du champ à trier dans la Table, valeur du tri). Ca renvoie un DataRow().

Mon problème c'est que la DataTable peut avoir des champs en string ou en numérique.
Du coup, l'expression de tri va avoir des '' si c'est en string et pas de '' si c'est en numérique.

J'ai écrit donc deux functions séparées pour la même chose selon que le filtrage ce fait sur une string ou un ushort :


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
Public Function ExtractDonneesDataTableDepuisString(ByRef Dtt As DataTable, ByVal NumChampFiltre As Byte, ByVal ExpressionFiltre As String, ByVal NumChampTri As Byte, ByVal ExpressionTri As String) As DataRow()
 
        'Renvoie le résultat en fonction des situations
        If NumChampFiltre = 0 And ExpressionFiltre = "" Then
            If NumChampTri = 0 And ExpressionTri = "" Then
                Return Dtt.Select()
            Else
                Return Dtt.Select("", Dtt.Columns(NumChampTri).ColumnName & " " & ExpressionTri)
            End If
        Else
            If NumChampTri = 0 And ExpressionTri = "" Then
                Return Dtt.Select(Dtt.Columns(NumChampFiltre).ColumnName & " = '" & ExpressionFiltre & "'", "")
            Else
                Return Dtt.Select(Dtt.Columns(NumChampFiltre).ColumnName & " = '" & ExpressionFiltre & "'", Dtt.Columns(NumChampTri).ColumnName & " " & ExpressionTri)
            End If
        End If
 
        Exit Function
 
    End Function
 
    Public Function ExtractDonneesDataTableDepuisUshort(ByRef Dtt As DataTable, ByVal NumChampFiltre As Byte, ByVal ExpressionFiltre As UShort, ByVal NumChampTri As Byte, ByVal ExpressionTri As String) As DataRow()
 
        'Renvoie le résultat en fonction des situations
        If NumChampFiltre = 0 And ExpressionFiltre = 0 Then
            If NumChampTri = 0 And ExpressionTri = "" Then
                Return Dtt.Select()
            Else
                Return Dtt.Select("", Dtt.Columns(NumChampTri).ColumnName & " " & ExpressionTri)
            End If
        Else
            If NumChampTri = 0 And ExpressionTri = "" Then
                Return Dtt.Select(Dtt.Columns(NumChampFiltre).ColumnName & " = " & CStr(ExpressionFiltre), "")
            Else
                Return Dtt.Select(Dtt.Columns(NumChampFiltre).ColumnName & " = " & CStr(ExpressionFiltre), Dtt.Columns(NumChampTri).ColumnName & " " & ExpressionTri)
            End If
        End If
 
        Exit Function
 
    End Function

Est-il possible de n'avoir qu'une fonction qui fait les deux cas de figure?

Je pensais à des trucs mais je ne sais pas si ça existe :

- deux fonctions qui s'appellent pareil mais avec une définition du paramètre ExpressionFiltre différente (un string, l'autre ushort). L'appli choisit en fonction des paramètres passés... Je ne sais pas si ça fonctionne comme ça, ou si ça va planter?
- Ou passer en paramètre un type générique, et dans la fonction selon le type du paramètre, faire '...' ou pas de '';
- Ou rester avec mes deux fonctions différentes comme maintenant?