2011-10-18 26 views
1

在VB.NET中,我为来自任何数据源(例如DataReader或IReader或集合等)的数据绑定gridviews/dropdownlists /等创建了2个简写函数:VB.NET to C#:在对象上使用数据绑定方法

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”等,同样我想保留灵活性,可以是IReader,iCollection等。

是否有可能在C#中使用匿名方法或类似方法复制VB.NET方法?

谢谢。

+0

我可能只是决定添加一个VB类库,尽管它似乎有点矫枉过正为了一个功能 – Peter

回答

1

您可以使用“var”匿名类型或输入case语句来查看传入对象的类型。

-edit-

你是对的,var在这里看起来不太可行。请试试这个方法,而不是:

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

     } 

问候, 保罗

+0

你能提供一个在上面的函数中使用“var”匿名类型的例子吗?我尝试将它添加到函数头,但它没有工作,也没有:var test = objDataSource; test.DataSource = ... – Peter

+0

@Peter - 是的,我也无法使用var工作。请参阅编辑的解决方案 – Paul

+0

这似乎适用于.net 3.5。谢谢! – Peter

0

你有选项严格在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(); 
} 

但同样,你真的应该考虑一个办法做到这一点,保持强大的编译时类型检查。

+0

啊,这将是完美的,但唉,我只使用asp.net 3.5,并限制这样做是由服务器运行该网站 – Peter