2011-10-18 23 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