Besoin d'aide pour comprendre la déclaration de variables dans une function / sub
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:
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?