日韩天天综合网_野战两个奶头被亲到高潮_亚洲日韩欧美精品综合_av女人天堂污污污_视频一区**字幕无弹窗_国产亚洲欧美小视频_国内性爱精品在线免费视频_国产一级电影在线播放_日韩欧美内地福利_亚洲一二三不卡片区

ASP.NET中Datagrid常見錯(cuò)誤(2)_.Net教程

編輯Tag賺U幣
教程Tag:暫無Tag,歡迎添加,賺取U幣!

推薦:在網(wǎng)頁中動(dòng)態(tài)的生成一個(gè)圖片
大家知道股票網(wǎng)站的K線圖是動(dòng)態(tài)生成的定時(shí)刷新PHP 就有動(dòng)態(tài)生成圖片的功能.那么怎樣用asp.net在網(wǎng)頁中動(dòng)態(tài)的生成一個(gè)圖片呢? 下面我要舉的例子是動(dòng)態(tài)的生成一個(gè)圖片顯示當(dāng)前時(shí)間.

運(yùn)行時(shí)不必要地在 Datagrid 中動(dòng)態(tài)創(chuàng)建 Datagrid 控件或列

在某些業(yè)務(wù)和技術(shù)方案中,在運(yùn)行時(shí)創(chuàng)建 ASP.NET 控件是必要的,也是完全合適的。例如,有時(shí)需要在選擇其他頁面選項(xiàng)后,才能在運(yùn)行時(shí)確定用戶界面�;蚴且�?jiǎng)?chuàng)建一個(gè)復(fù)合服務(wù)器控件,其中的每個(gè)子控件都需要?jiǎng)討B(tài)創(chuàng)建,因?yàn)闊o法以聲明的方式創(chuàng)建這些子控件。如果遇到這些情況,請(qǐng)注意,提交頁面時(shí)不要保留這些動(dòng)態(tài)控件。必須在頁面生命周期的早期,在每次回發(fā)時(shí)重新創(chuàng)建動(dòng)態(tài)控件(例如在 Page_Init 事件中)。警言:創(chuàng)建控件要早,創(chuàng)建控件要勤。有關(guān)如何動(dòng)態(tài)創(chuàng)建控件的詳細(xì)信息,請(qǐng)參閱 Microsoft Knowledge Base 文章 HOW TO:Dynamically Create Controls in ASP.NET with Visual Basic .NET。

然而,如果 Datagrid 應(yīng)用程序中不是一定需要?jiǎng)討B(tài)創(chuàng)建控件,請(qǐng)避免使用該技術(shù),以免遇到麻煩。盡管可能創(chuàng)建動(dòng)態(tài) Datagrid,但它們會(huì)引發(fā)各種事件,這通常都會(huì)令人頭疼。換句話說,不要?jiǎng)討B(tài)創(chuàng)建控件,以避免因?yàn)閯?chuàng)建控件使 ASPX 文件變得散亂。

持續(xù)使用大型 ViewState

Datagrid 控件會(huì)在頁面中添加大量的 ViewState,這一點(diǎn)令人討厭,因?yàn)檫@會(huì)導(dǎo)致呈現(xiàn)給用戶的頁面的總體大小急劇增加。要使頁面大小不增加,最簡單的方法是無論對(duì)整個(gè)頁面,還是單獨(dú)對(duì)某些特定的控件,都禁用 ViewState。例如,如果頁面不產(chǎn)生回發(fā),那么對(duì)整個(gè)頁面禁用 ViewState 是安全的。否則,請(qǐng)對(duì)兩次回發(fā)之間狀態(tài)信息不會(huì)發(fā)生更改的各個(gè)控件禁用 ViewState,或者對(duì)不需要隱藏字段來跟蹤自身狀態(tài)的那些控件禁用 ViewState。

對(duì) Datagrid 控件或包含 Datagrid 的頁面禁用 ViewState 時(shí),如果 Datagrid 會(huì)啟動(dòng)回發(fā)事件,那么需要執(zhí)行一些特殊的步驟。首先,必須在每次回發(fā)時(shí)在 Page_Load 中重新綁定 Datagrid。這有違常規(guī)做法(以及上述第二個(gè)問題中的描述)。但如果禁用 ViewState,該步驟是必需的,這樣在執(zhí)行 Page_Load 后可以正確地引發(fā)其他 Datagrid 事件。如果要處理以下 Datagrid 事件中的任何一部分(或全部),那么還需要在 ViewState 中手動(dòng)存儲(chǔ)一些 Datagrid 屬性。例如,在禁用了 ViewState 的 Datagrid 中進(jìn)行編輯時(shí),只要是在 Page_Load 中第一次綁定 Datagrid 之前重新存儲(chǔ) EditItemIndex,且 Datagrid 處于編輯模式,那么只需將 EditItemIndex 儲(chǔ)存到 ViewState 就夠了。

表 1:Datagrid 事件與 ViewState 的依賴關(guān)系

事件 是否依賴于 ViewState? 要存儲(chǔ)在 ViewState 中的字段
ItemCreated 無
ItemDataBound 無
SortCommand 是 SortExpression
EditCommand 是 EditItemIndex
PageIndexChanged 是 CurrentPageIndex
SelectedIndexChanged 無

  清單 1:啟用編輯、排序和分頁,但禁用 ViewState 的 Datagrid 的示例代碼。

Sub Page_Load
 If Not ViewState("EditItemIndex") Is Nothing Then
  Datagrid1.EditItemIndex = ViewState("EditItemIndex")
 End If
 If Not ViewState("CurrentPageIndex") Is Nothing Then
  Datagrid1.CurrentPageIndex = ViewState("CurrentPageIndex")
 End If
 BindGrid()
End Sub

Sub BindGrid()
 Dim DV As DataView
 DV = GetDataSource()
 DV.Sort = ViewState("SortExpression")
 Datagrid1.DataSource = DV
 Datagrid1.DataBind()
End Sub

Sub Datagrid1_SortCommand(s As Object, e As DataGridSortCommandEventArgs)
 ViewState("SortExpression") = e.SortExpression
 BindGrid()
End Sub

Sub Datagrid1_EditCommand(s As Object, e As DatagridCommandEventArgs)
 Datagrid1.EditItemIndex = e.Item.ItemIndex
 ViewState("EditItemIndex") = e.Item.ItemIndex
 BindGrid()
End Sub

Sub Datagrid1_PageIndexChanged(s as Object, e As DataGridPageChangedEventArgs)
 Datagrid1.CurrentPageIndex = e.NewPageIndex
 ViewState("CurrentPageIndex") = e.NewPageIndex
 BindGrid()
End Sub

使用 ItemDataBound 或 ItemCreated 事件時(shí),忘記檢查適當(dāng)?shù)?ListItemType

Datagrid 控件對(duì)每個(gè)數(shù)據(jù)行引發(fā)兩個(gè)事件。首次將每行添加到 Datagrid 時(shí)將引發(fā) ItemCreated 事件,將數(shù)據(jù)綁定到每行時(shí)將引發(fā) ItemDataBound 事件。添加單元格到 Datagrid 的表格輸出時(shí),這些事件可以用于控制每個(gè)單元格的外觀或內(nèi)容。例如,可以基于數(shù)值的范圍修改單元格的背景顏色。但關(guān)鍵是要記住,這些事件的引發(fā)針對(duì)的是所有 Datagrid 項(xiàng)目類型,包括頁眉、頁腳和分頁程序項(xiàng)目。如果執(zhí)行 ItemDataBound 事件期間,沒有在引用項(xiàng)目的數(shù)據(jù)之前仔細(xì)檢查項(xiàng)目類型,第一個(gè)項(xiàng)目(通常是標(biāo)題行)就將發(fā)生錯(cuò)誤。如果 Datagrid 啟用了分頁,且將其設(shè)置為在頂端顯示,那么第一個(gè)項(xiàng)目就會(huì)成為分頁程序項(xiàng)目。以下示例代碼顯示如何在引用項(xiàng)目數(shù)據(jù)之前進(jìn)行正確的 ListItemType 檢查。不要忘了 AlternatingItem!

Sub DataGrid1_ItemDataBound(source As Object,e As DataGridItemEventArgs)
If (e.Item.ItemType = ListItemType.Item Or e.Item.ItemType = ListItemType.AlternatingItem)   Then
  If e.Item.DataItem("ForumDate") < DateTime.Today Then
    e.Item.Cells(1).BackColor =System.Drawing.Color.FromName("#ffccff")
  End If
 End If
End Sub

需要對(duì)生成的 HTML 有更多的控制時(shí),過多地使用了 Datagrid(Repeater 也許是更好的選擇)

如果懶散的程序員喜歡 Datagrid 控件(因?yàn)?Datagrid 控件為他們完成了很多工作),那么有著極強(qiáng)控制欲的程序員必定喜歡 Repeater 控件。如果需要或希望完全控制創(chuàng)建的所有 HTML,請(qǐng)使用 Repeater 控件,它能幫助您完成該任務(wù)。Repeater 控件在性能上也略占優(yōu)勢(shì),因?yàn)樗幌?Datagrid 控件的所有內(nèi)置功能那樣占用系統(tǒng)資源。也可以考慮使用折衷的 DataList 控件,它具備編輯和排序功能,同時(shí)還具有在一行內(nèi)重復(fù)顯示記錄的功能。

分享:C#是一種新的語言?或者僅僅只是Java
最開始時(shí)微軟公司將Java當(dāng)做一種能解決C和C 中存在的問題的語言,并不在意,并繼續(xù)維持和培訓(xùn)著其C和C 技術(shù)和編程人員。接下來不幸的是,正當(dāng)微軟盡力在Visual J 基礎(chǔ)上拓展Java功能,并使之

共2頁上一頁12下一頁
來源:模板無憂//所屬分類:.Net教程/更新時(shí)間:2008-08-22
相關(guān).Net教程