VB.NET TO C#: Использование методов связывания данных на объекте
-
25-10-2019 - |
Вопрос
В VB.NET I создал 2 функции сокращения для привязки данных Gridviews/Roddownlists/ETC из любого данного данных (например, DataReader или Ireader или Collection и т. Д.):
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
Я преобразовал это в C# как таковой:
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();
}
Тем не менее, это, очевидно, не работает, так как методы связывания данных недоступны для objitem, если только я не поддаю его такому типу, как «Listbox» или «Gridview» и т. Д. Аналогично я хочу сохранить гибкость, которая objdatasource может быть либо иридер, Icollection и т. Д.
Можно ли повторить подход VB.NET в C#, используя анонимные методы или что -то подобное?
Спасибо.
Решение
Вы можете использовать анонимный тип «var» или ввести оператор CASE, чтобы увидеть, какой тип ваш входящий объект.
-редактировать-
Вы правы, VAR здесь не кажется работоспособным. Попробуйте это решение вместо этого:
public void BindObject(object objDataSource, object objItem)
{
(objItem as BaseDataBoundControl).DataSource = objDataSource;
(objItem as BaseDataBoundControl).DataBind();
}
С уважением, Пол
Другие советы
У вас есть опция строго отключена в коде VB. TSK TSK - это не лучший выбор.
Чтобы получить аналогичный эффект в C#, вы можете сделать это:
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();
}
Но опять же, вы должны действительно изучить способ сделать это, который сохраняет сильную проверку типа времени компиляции.