2010-04-30 65 views
3

我有一些我維護的Web應用程序,我發現自己經常反覆寫同一代碼塊來將GridView綁定到數據源。我試圖創建一個通用的方法來處理數據綁定,但我很難讓它與Repeaters和DataLists一起工作。通過通用方法的C#ASP.NET綁定控件

這裏是通用的方法我到目前爲止:

public void BindControl<T>(T control, SqlCommand sql) where T : System.Web.UI.WebControls.BaseDataBoundControl 
    { 
     cmd = sql; 
     cn.Open(); 
     SqlDataReader dr = cmd.ExecuteReader(); 
     if (dr.HasRows) 
     { 
      control.DataSource = dr; 
      control.DataBind(); 
     } 
     dr.Close(); 
     cn.Close(); 
    } 

這樣,我就可以定義我的CommandText然後打個電話給「BindControls(myGridView,CMD)」,而不是重新鍵入這個相同的基本塊代碼每次我需要綁定一個網格。

問題是,這不適用於中繼器或數據列表。每個控件都從不同的類繼承它們各自的「DataSource」和「DataBind」方法。另一個論壇上的人建議我實現一個接口,但我不知道如何使這個工作。

GridView,Datalist和Repeater分別從BaseDataBoundControl,BaseDataList和Repeater類中獲取各自的「DataBind」方法。我將如何創建一個單一的界面將它們連接在一起?還是我最好只使用3個重載方法?

  • 戴夫

回答

0

我會嘗試是設置DataSource屬性和運行的DataBind()用反射法。而不是將T型綁定到特定類型。

0

我也是這樣做過的,創建3個重載如你所建議的絕對是一個很好的解決方案。創建一個像您所設想的「可綁定」界面爲時已晚,在設計對象時需要實現界面。