深談使用ADO.NET數(shù)據(jù)列表達(dá)式
ADO.NET數(shù)據(jù)列還是比較常用的,于是我研究了一下表達(dá)式也可以通過(guò)ADO.NET數(shù)據(jù)列對(duì)象定義,在這里拿出來(lái)和大家分享一下,希望對(duì)大家有用。作為通過(guò)SQL語(yǔ)句計(jì)算擴(kuò)充價(jià)格的替代者,ADO.NET數(shù)據(jù)列可以被定義用于表現(xiàn)擴(kuò)充價(jià)格。在SQL語(yǔ)句和數(shù)據(jù)列中使用表達(dá)式的區(qū)別是,如果表達(dá)式中的某個(gè)字段被修改了,數(shù)據(jù)列會(huì)自動(dòng)更新表達(dá)式所定義的字段,但SQL表達(dá)式不會(huì)更新數(shù)據(jù)列。
#T#下面的代碼演示了怎樣使用SQL語(yǔ)句填充數(shù)據(jù)集的數(shù)據(jù)表并建立一個(gè)新數(shù)據(jù)列描述計(jì)算表達(dá)式,該表達(dá)式使用數(shù)據(jù)集的唯一數(shù)據(jù)表中的其它字段得到。接著該數(shù)據(jù)表的默認(rèn)視圖被綁定到ASP.NET的一個(gè)叫做grdOrderDetail 的DataGrid控件。這段代碼使用訂單詳細(xì)信息建立和填充了一個(gè)數(shù)據(jù)集。接著一個(gè)列被添加到該數(shù)據(jù)集的數(shù)據(jù)表,用于表現(xiàn)該表達(dá)式。該列叫ExtendedPrice,數(shù)據(jù)類(lèi)型為浮點(diǎn)型,它的表達(dá)式是產(chǎn)品單價(jià)和數(shù)量列。該表達(dá)式能涉及數(shù)據(jù)表的任意數(shù)據(jù)列,從當(dāng)前的數(shù)據(jù)行中取得值。例如,如果第一行數(shù)量為10,單價(jià)為7,擴(kuò)充價(jià)格列將使用的值為70。
在計(jì)算中表達(dá)式可以包括從數(shù)據(jù)表中其它字段得到的字面值。例如,定義擴(kuò)充價(jià)格的表達(dá)式可以稍作改變,使它考慮折扣率:
- oDs.Tables["OrderDetail"].Columns.Add("ExtendedPrice",
- typeof(decimal), "(UnitPrice * Quantity) * (1 - Discount)");
試著改變UnitPrice、Discount或Quantity數(shù)據(jù)列的值,結(jié)果是與從SQL表達(dá)式衍生的列不同,ExtendedPrice數(shù)據(jù)列也被更新了。該特征對(duì)應(yīng)用程序很重要,特別是在用戶(hù)能修改購(gòu)物車(chē),確認(rèn)改變,然后查看更新后的總價(jià)格的情況下。
表達(dá)式也可以用于表現(xiàn)其它數(shù)據(jù)類(lèi)型,例如邏輯型和字符型值。下面的代碼演示了添加一個(gè)字段用于顯示一個(gè)作者是否有折扣:
- oDs.Tables["OrderDetail"].Columns.Add("GetsDiscount", typeof(bool),
- "Discount > 0");
你能使用AND、OR或NOT條件建立混合表達(dá)式來(lái)考慮多個(gè)條件,這樣可以加強(qiáng)前面的表達(dá)式。還有一些操作符,包括LIKE和IN也可以在表達(dá)式中使用。
表達(dá)式也能表現(xiàn)字符串值,例如從數(shù)據(jù)表中取得姓和名并連接到一起。下面的代碼段將ProductName與ProductID連接在一起:
- oDs.Tables["OrderDetail"].Columns.Add("stringfield", typeof(string),
- "ProductID + '-' + ProductName");