Domanda

In VB.NET ho creato 2 funzioni abbreviate per l'associazione dati GridView / DropDownList / etc da qualsiasi origine dati (come ad esempio un DataReader o iReader o di raccolta, ecc):

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

ho convertito questo per C # in quanto tale:

    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();
    }

Ma questo, ovviamente, non funziona come i metodi di associazione dati non sono accessibili a objItem , a meno che non esplicitamente lo gettò a un tipo come "ListBox" o "GridView", etc. Allo stesso modo voglio mantenere la flessibilità che objDataSource può essere sia un iReader, ICollection, ecc.

E 'possibile replicare l'approccio VB.NET in C # utilizzando i metodi anonimi o qualcosa di simile?

Grazie.

È stato utile?

Soluzione

Si potrebbe utilizzare il "var" tipo anonimo o immettere un'istruzione case per vedere che tipo l'oggetto in arrivo è.

-edit -

Lei ha ragione, il var non sembra praticabile qui. Si prega di provare questa soluzione invece:

public void BindObject(object objDataSource, object objItem)
        {
            (objItem as BaseDataBoundControl).DataSource = objDataSource;
            (objItem as BaseDataBoundControl).DataBind();    

        }

Saluti, Paul

Altri suggerimenti

Hai avuto Option Strict disattivato nel codice VB. Tsk tsk -. Che non è davvero la scelta migliore

Per ottenere un effetto simile in C #, si può fare questo:

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();
}

Ma ancora una volta, si dovrebbe davvero guardare in un modo per fare questo che conserva forte controllo dei tipi in fase di compilazione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top