VB.NET C#:Mit Data-Binding-Methoden auf dem Objekt
-
25-10-2019 - |
Frage
In VB.NET erstellt habe ich 2 Kurzform Funktionen zur Daten-Bindung gridviews/dropdownlists/etc aus einer beliebigen Datenquelle (wie ein DataReader oder IReader oder Sammlung, 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
Ich wandelte diese in C# wie folgt:
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();
}
Doch ist dies natürlich nicht funktionieren, da der Daten-Bindung Methoden nicht zugänglich objItem,, wenn ich ausdrücklich werfe es in einen Typ wie "ListBox" oder "Gridview", etc.Ebenso möchte ich behalten die Flexibilität, die objDataSource kann entweder ein IReader, iCollection, etc.
Ist es möglich zu replizieren, die VB.NET Ansatz in C# anonyme Methoden oder etwas ähnliches?
Vielen Dank.
Lösung
Sie könnte verwenden die "var" anonymen Typ oder geben Sie eine case-Anweisung, um zu sehen, was geben Sie Ihre eingehende Objekt.
-Bearbeiten-
Sie sind richtig, der var scheint nicht praktikabel, hier.Bitte versuchen Sie diese Lösung statt:
public void BindObject(object objDataSource, object objItem)
{
(objItem as BaseDataBoundControl).DataSource = objDataSource;
(objItem as BaseDataBoundControl).DataBind();
}
Grüße, Paul
Andere Tipps
Du hast die Option Strict ausgeschaltet in Ihrem VB-code.Tsk-tsk — das ist nicht wirklich die beste Wahl.
Um einen ähnlichen Effekt in C# können Sie dies tun:
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();
}
Aber wieder, sollten Sie wirklich einen Blick in einen Weg, das zu tun, bewahrt strong compile-time type checking.