VB.NET a C #: utilizzando metodi in oggetto di associazione dati
-
25-10-2019 - |
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.
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.