VB.NET à C #: en appliquant des méthodes sur l'objet de liaison de données
-
25-10-2019 - |
Question
VB.NET I créé 2 fonctions de raccourci pour la liaison de données GridViews / DropDownLists / etc de toute source de données (par exemple un DataReader ou iReader ou collection, etc.):
Public Shared Sub BindObject(ByVal objDataSource As Object, ByVal objItem As Object)
objItem.DataSource = objDataSource
objItem.DataBind()
End Sub
Public Shared Sub BindObject(ByVal objDataSource As Object, ByVal objItem As Object, ByVal sTextField As String, ByVal sValueField As String)
objItem.DataSource = objDataSource
If sTextField <> "" Then objItem.DataTextField = sTextField
If sValueField <> "" Then objItem.DataValueField = sValueField
objItem.DataBind()
End Sub
Je me suis converti ce à C # en tant que tel:
public static void BindObject(object objDataSource, object objItem)
{
objItem.DataSource = objDataSource;
objItem.DataBind();
}
public static void BindObject(object objDataSource, object objItem, string sTextField, string sValueField)
{
objItem.DataSource = objDataSource;
if (!string.IsNullOrEmpty(sTextField))
objItem.DataTextField = sTextField;
if (!string.IsNullOrEmpty(sValueField))
objItem.DataValueField = sValueField;
objItem.DataBind();
}
Pourtant, cela ne fonctionne évidemment pas les méthodes de liaison de données ne sont pas accessibles à objItem , à moins que je explicity le jeter à un type tel que « ListBox » ou « Gridview », etc. de même, je veux conserver la flexibilité que objDataSource peut être soit un iReader, ICollection, etc.
Est-il possible de reproduire l'approche VB.NET en C # en utilisant des méthodes anonymes ou quelque chose de similaire?
Merci.
La solution
Vous pouvez utiliser le type anonyme « var » ou entrez une instruction case pour voir quel type de votre objet entrant est.
-edit -
Vous avez raison, le var ne semble pas réalisable ici. S'il vous plaît plutôt essayer cette solution:
public void BindObject(object objDataSource, object objItem)
{
(objItem as BaseDataBoundControl).DataSource = objDataSource;
(objItem as BaseDataBoundControl).DataBind();
}
Cordialement, Paul
Autres conseils
Vous avez obtenu Option Strict désactivé dans votre code VB. Tss -. Ce n'est pas vraiment le meilleur choix
Pour obtenir un effet similaire en C #, vous pouvez faire ceci:
public static void BindObject(object objDataSource, dynamic objItem)
{
objItem.DataSource = objDataSource;
objItem.DataBind();
}
public static void BindObject(object objDataSource, dynamic objItem, string sTextField, string sValueField)
{
objItem.DataSource = objDataSource;
if (!string.IsNullOrEmpty(sTextField))
objItem.DataTextField = sTextField;
if (!string.IsNullOrEmpty(sValueField))
objItem.DataValueField = sValueField;
objItem.DataBind();
}
Mais encore une fois, vous devriez vraiment regarder dans une façon de faire qui conserve une forte vérification de type compilation de temps.