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.

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top