ASP.NET中Datagrid常見(jiàn)錯(cuò)誤_.Net教程
推薦:在網(wǎng)頁(yè)中動(dòng)態(tài)的生成一個(gè)圖片大家知道股票網(wǎng)站的K線圖是動(dòng)態(tài)生成的定時(shí)刷新PHP 就有動(dòng)態(tài)生成圖片的功能.那么怎樣用asp.net在網(wǎng)頁(yè)中動(dòng)態(tài)的生成一個(gè)圖片呢? 下面我要舉的例子是動(dòng)態(tài)的生成一個(gè)圖片顯示當(dāng)前時(shí)間.
摘要:學(xué)習(xí)如何避免在使用 ASP.NET Datagrid 控件進(jìn)行開(kāi)發(fā)時(shí)可能發(fā)生的一些常見(jiàn)錯(cuò)誤。
Datagrid 控件是 Microsoft? ASP.NET 中功能最強(qiáng)、用途最廣的 Web 控件之一,這一點(diǎn)已經(jīng)得到了 ASP.NET 權(quán)威人士的認(rèn)同。雖然 Datagrid 控件易于使用,但同樣易于給使用者帶來(lái)麻煩。以下是許多人所犯的一些錯(cuò)誤,這些人包括從初學(xué)者到富有經(jīng)驗(yàn)的 .NET 專家。您可以看到許多苦悶的使用者在 ASP.NET 新聞組和論壇就這些錯(cuò)誤提出問(wèn)題。遵循本文概述的相當(dāng)簡(jiǎn)單的步驟,可以幫助您避免這些錯(cuò)誤,并節(jié)約大量的開(kāi)發(fā)時(shí)間。
可以使用 Datagrid 創(chuàng)建列表數(shù)據(jù)而沒(méi)有使用
我知道您不會(huì)再使用如下所示的代碼,但 ASP.NET 領(lǐng)域中許多守舊的用戶仍在繼續(xù)使用它們:
Response.Write("<table>")
While MyDataReader.Read()
Response.Write("<tr>")
Response.Write("<td>")
Response.Write(MyDataReader(0))
Response.Write("</td>")
Response.Write("</tr>")
Loop
Response.Write("</table>")
可以對(duì)以上代碼進(jìn)行簡(jiǎn)化,使其僅為:
<asp:datagrid runat="server" datasource="MyDataReader"/>
并調(diào)用 .DataBind() 方法。即使需要對(duì)HTML輸出進(jìn)行特殊的控制,您也可以在用戶界面上記錄集的內(nèi)容重復(fù)出現(xiàn)的情況下,使用某個(gè)數(shù)據(jù) Web 控件。
忘記在 Page_Load 事件中檢查 IsPostBack
最常見(jiàn)的錯(cuò)誤之一是忘記在數(shù)據(jù)綁定之前檢查頁(yè)面的 IsPostBack 條件。例如,Datagrid 處于“Edit”(編輯)模式時(shí),忽略該項(xiàng)檢查將導(dǎo)致已編輯的值被數(shù)據(jù)源中的原始值覆蓋。然而,該規(guī)則至少有一個(gè)主要的例外,請(qǐng)參閱持續(xù)使用大型 ViewState。
以下是包含 IsPostBack 檢查的一個(gè)典型 Page_Load 事件。BindGrid() 是一個(gè)例程,用于導(dǎo)入并設(shè)置 Datagrid 的數(shù)據(jù)源,并調(diào)用 DataBind() 方法。
Sub Page_Load
If Not IsPostBack Then
BindGrid()
End If
End Sub
需要更大的靈活性時(shí),仍堅(jiān)持使用自動(dòng)生成的列
如果 Datagrid 所處的環(huán)境需要任何一種特殊格式,或是需要使用 Datagrid 中的其他任何 Web 控件,那么必須關(guān)閉 AutoGenerateColumns。將 AutoGenerateColumns 屬性的設(shè)置保持為“True”(默認(rèn)設(shè)置)的做法,僅在最簡(jiǎn)單的 Datagrid 方案中有效。但對(duì)幾乎所有實(shí)際的應(yīng)用程序,必須將該屬性設(shè)置為“False”,并在 Datagrid 聲明的 <columns></columns> 段中明確地指定列。Microsoft Visual Studio? .NET 用戶可以使用屬性生成器以圖形化的方式創(chuàng)建這些列。
注意:如果將 AutoGenerateColumns 的設(shè)置保持為“True”,并且在 Datagrid 的 <columns> 段中指定了列,那么最終將得到對(duì)列的重復(fù)設(shè)置。系統(tǒng)將首先顯示特別聲明的列,隨后是所有自動(dòng)生成的列。
嘗試僅使用控件 ID 來(lái)引用 Datagrid 項(xiàng)目中的控件
許多人沒(méi)有認(rèn)識(shí)到,對(duì)于 Datagrid 的 TemplateColumn 下的 ItemTemplate 中的控件(例如帶有“MyTextBox”ID 的 TextBox 控件),不能在后面的代碼或是在 ASPX 頁(yè)面的 <script> 段中用如下所示的代碼來(lái)直接調(diào)用該控件:
Dim MyValue As String = MyTextBox.Text
該代碼將導(dǎo)致可怕的“名稱‘MyTextBox’沒(méi)有聲明”錯(cuò)誤。
因?yàn)?Datagrid 是由多個(gè)行(項(xiàng)目)組成的,所以數(shù)據(jù)源中的每一行實(shí)際都會(huì)有一個(gè)單獨(dú)的“MyTextBox”實(shí)例。ASP.NET 在每個(gè)控件的 ID 前面加上該控件層次結(jié)構(gòu)中每個(gè)命名容器的 ID,這樣 Textbox 將具有唯一的 ID,與頁(yè)面中所有其他控件的 ID 都不相同。例如,如果 MyTextBox 處于 DataGrid1 中,那么生成的 ID 將是 DataGrid1:_ctl2:MyTextBox。“_ctl2”代表 MyTextBox 所處的當(dāng)前行。頁(yè)面中其他 MyTextBox 實(shí)例的 ID 可能是 DataGrid1:_ctl3:MyTextBox、DataGrid1:_ctl4:MyTextBox 等等。要檢索需要查找的“MyTextBox”值,需要對(duì)適當(dāng)?shù)?DataGridItem 調(diào)用 FindControl 方法。該 DataGridItem 用作 TextBox 的父命名容器。
HTML:
<asp:Datagrid runat="server" id="Datagrid1">
<Columns>
<asp:TemplateColumn>
<ItemTemplate>
<asp:TextBox runat="server" id="MyTextBox"/>
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
代碼:
Sub DataGrid1_UpdateCommand(sender As Object, e As DataGridCommandEventArgs)
Dim MyValue As String = CType(e.Item.FindControl("MyTextBox"), TextBox).Text
'對(duì) MyValue 執(zhí)行操作
End Sub
對(duì) FindControl 調(diào)用的結(jié)果調(diào)用 CType,將會(huì)把返回值由 Object 類型強(qiáng)制轉(zhuǎn)換成 TextBox 類型,以訪問(wèn) .Text 屬性。
忘記在每個(gè) Datagrid 事件中執(zhí)行 .DataBind() 調(diào)用,從而導(dǎo)致回發(fā)
一個(gè)常見(jiàn)的問(wèn)題是:“當(dāng)我點(diǎn)擊 Datagrid 某一行中的 Edit(編輯)鏈接時(shí),頁(yè)面回發(fā),且不包含任何數(shù)據(jù)。這是什么錯(cuò)誤?”問(wèn)題在于數(shù)據(jù)僅在頁(yè)面第一次被調(diào)用時(shí)綁定到網(wǎng)格。在每個(gè) Datagrid 事件(Edit、Update、Cancel、Page 或 Sort)中,請(qǐng)確保設(shè)置了 Datagrid 的 Datasource 屬性(除非已經(jīng)在 <asp:Datagrid> 聲明中通過(guò)聲明的方式進(jìn)行了設(shè)置),并對(duì) Datagrid 調(diào)用了 DataBind() 方法。
分享:C#是一種新的語(yǔ)言?或者僅僅只是Java最開(kāi)始時(shí)微軟公司將Java當(dāng)做一種能解決C和C 中存在的問(wèn)題的語(yǔ)言,并不在意,并繼續(xù)維持和培訓(xùn)著其C和C 技術(shù)和編程人員。接下來(lái)不幸的是,正當(dāng)微軟盡力在Visual J 基礎(chǔ)上拓展Java功能,并使之
- asp.net如何得到GRIDVIEW中某行某列值的方法
- .net SMTP發(fā)送Email實(shí)例(可帶附件)
- js實(shí)現(xiàn)廣告漂浮效果的小例子
- asp.net Repeater 數(shù)據(jù)綁定的具體實(shí)現(xiàn)
- Asp.Net 無(wú)刷新文件上傳并顯示進(jìn)度條的實(shí)現(xiàn)方法及思路
- Asp.net獲取客戶端IP常見(jiàn)代碼存在的偽造IP問(wèn)題探討
- VS2010 水晶報(bào)表的使用方法
- ASP.NET中操作SQL數(shù)據(jù)庫(kù)(連接字符串的配置及獲取)
- asp.net頁(yè)面?zhèn)髦禍y(cè)試實(shí)例代碼
- DataGridView - DataGridViewCheckBoxCell的使用介紹
- asp.net中javascript的引用(直接引入和間接引入)
- 三層+存儲(chǔ)過(guò)程實(shí)現(xiàn)分頁(yè)示例代碼
.Net教程Rss訂閱編程教程搜索
.Net教程推薦
- Google免費(fèi)的SVN服務(wù)器管理VS2010代碼
- 如何用asp.net程序備份或還原SQLServer
- 基于.NET Framework 微軟Silverlight下載
- 使用ADO.NET2.0提升數(shù)據(jù)交互性能(2)
- .NET中如何生成靜態(tài)頁(yè)
- 如何構(gòu)造一個(gè)C#語(yǔ)言的爬蟲(chóng)程序
- ajax.net +jquery 無(wú)刷新三級(jí)聯(lián)動(dòng)的實(shí)例代碼
- 揭秘.Net開(kāi)發(fā)人員必知的八個(gè)網(wǎng)站
- 遷移你的Web頁(yè)面到ASP.NET AJAX 1.0
- 解讀如何在.NET中訪問(wèn)MySQL數(shù)據(jù)庫(kù)
- 相關(guān)鏈接:
- 教程說(shuō)明:
.Net教程-ASP.NET中Datagrid常見(jiàn)錯(cuò)誤
。