.NET中DataGrid的使用(一)數據綁定


作者:小木 

一直以來都比較偏愛DataList一點。因爲這傢伙的發佈格式比Repeater好一點,自定制的靈活度又比DataGrid好一點。但是這個笨蛋居然沒有翻頁功能!kao,難道使用DataList的用戶會只有十來條數據,一頁就可以顯示清楚的嗎?? 

不想自己給DataList去做翻頁,所以這一週就研究了一下DataGrid。基本上來講這傢伙也很笨,但是總算是搞清楚怎麽用它了。那先從數據綁定寫起。 

總是有一些基礎的東西要先鋪墊一下。說實話,我以前也就是用,沒有仔細總結。基本來講,數據綁定有兩種情況: 

1 、單值數據綁定:用於需要把一個值綁定到某控件上(廢話)。例如要設置一個控件的某個屬性。語法就是: <% # property_name %> ,當然也可以使用server的方法: <% # method_name(para1, para2....) %> ,或者使用表達式: <% # expression %> 。 

比如,我要在頁面上某個server的Label里顯示當前用戶的名稱。那我可以寫一個方法public string GetName()然後return一個從session或者其他什麽裏面讀到的用戶的名字。然後在aspx文件的Label代碼里寫:Text
= " <%# GetName()%> " ,然後對應的地方就會顯示名字了。 

什麽,你沒有顯示?啊sorry,我忘記講要DataBind()了!可以只調用綁定了數值的控件的DataBind(),如果很多也可以使用Page的DataBind()就全部都包括進去了。 

那上面的例子我也看到過這樣的寫法:
<%=  GetName() %> 這個應該不叫做數據綁定阿,他是寫在頁面上客戶端控件里的,比如 < td ></ td > 或者 < span ></ span > 標簽裏面,也不需要DataBind()。.NET會把server拿到的值直接放到頁面上對應的地方去。 

  

2 、重復值數據綁定:用於數據源包含多個值的情況。例如要把列表、集合或行集綁定到一個可以顯示多個值的控件上。專門為服務器短數據綁定設計的8個控件是:HTML < select > , ASP:ListBox, ASP:DropDownList, ASP:CheckBoxList, ASP:RadioButtonList, ASP:Repeater, ASP:DataList, ASP:DataGrid。可綁定的數據源包括:Collection(如Request.Form中的集合、DataSet的Tables集合中表的集合、或自己創建和填充的集合), ArrayList(哈哈,這是我最喜歡用的東西,因爲蝦米都可以往它裏面放!汗), HashTable, DataView, DataSet, DataReader。 

這些控件裏面,如果控件支持模版,那麽好辦拉,創建和定義好模版就行了。如果不支持,可以在運行時設置控件屬性,動態的將數據源中的字段賦予給該控件的屬性。我想應該就是指DataTextField和DataValueField這些屬性吧! 

那多值綁定的話語法比較簡單的就是
<% # Container.DataItem( " field_name " ) %> 了。但是我通常沒有辦法使用它,因爲我討厭把DataTable這樣的東西在UI層里賦來賦去的。通常我喜歡自己在Model定義一個對象,然後在DataAccess層去讀取數據庫,拿到的DataTable或者DataRow等sql對應的對象就直接傳給BusinessLogic,然後BusinessLogic就把它做成Model裏面我自己定義的對象,返回給UI層。這也就是爲什麽我會最常用ArrayList了。這樣寫UI的程序員可以不用管數據庫里的表怎樣設計的,他只要看Model的代碼,拿他想要的東西就行了。這個時候就要使用這個語法的變形了,因爲DataGrid或者其他控件可不知道我的Model裏面怎樣定義的: 

<% # DataBinder.Eval(Container.DataItem, property_name)  %> 哇卡卡卡,我愛死Eval了,不管我給他什麽object,他都能把那個object中我指定的property拿出來,盡量的顯示成文本。而且你還可以格式化,例如隨便從我最近寫好的一個文檔里copy一句出來是這樣: 

<% # ((DateTime)(DataBinder.Eval(Container.DataItem, vwProjects_Info.c_strSQLCOL_VWPROJECTS_DT_DATE))).ToString(System.Configuration.ConfigurationSettings.AppSettings[ " DateFormat " ])  %>  

解釋一下,vwProjects_Info就是我自己根據數據庫里一個叫做vwProjects的視圖做的一個類。這個視圖有一個字段是DateTime型,名字叫做dt_date。那我的這個類就會有一個成員叫做c_strSQLCOL_VWPROJECTS_DT_DATE,就是對應與這個字段。如此一來,UI的程序員(雖然這個例子里的視圖和頁面都是我自己做
^^ b)就可以不用知道數據庫里視圖是怎樣子,他只要這樣寫,各個對應於這個視圖里的各條紀錄的對象就綁定到這個DataGrid的各個Item上面了。然後我把它轉換成DateTime型,最後用ToString()把它格式化。格式參數是我在webconfig文件里定義的:   < add key = " DateFormat "  value = " MM'/'dd'/'yyyy "   /> 。這樣做只是爲了保證所有的頁面上風格可以統一。 

我手頭一本參考書這樣總結使用Eval的情況的: 

*  數據源中的各行或列表項包含多個值(多個列或字段)時; 

*  要使用不同於綁定控件的對象作爲值的源時; 

*  要格式化要顯示的值時; 

基本上第2個我不太用...例如不要使用Container里綁定到這個item的DataItem,而另外指定一個對象的某行某列的值,大概就是這樣子。這好像有點像在多值綁定裏面去嵌了一個單值綁定。 

(續)

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值