ASP.NET中Datagrid常见错误(二)

原创 2004年07月14日 08:02:00
  尝试仅使用控件 ID 来引用 Datagrid 项目中的控件

  许多人没有认识到,对于 Datagrid 的 TemplateColumn 下的 ItemTemplate 中的控件(例如带有“MyTextBox”ID 的 TextBox 控件),不能在后面的代码或是在 ASPX 页面的 <script> 段中用如下所示的代码来直接调用该控件:

Dim MyValue As String = MyTextBox.Text

  该代码将导致可怕的“名称‘MyTextBox’没有声明”错误。

  因为 Datagrid 是由多个行(项目)组成的,所以数据源中的每一行实际都会有一个单独的“MyTextBox”实例。ASP.NET 在每个控件的 ID 前面加上该控件层次结构中每个命名容器的 ID,这样 Textbox 将具有唯一的 ID,与页面中所有其他控件的 ID 都不相同。例如,如果 MyTextBox 处于 DataGrid1 中,那么生成的 ID 将是 DataGrid1:_ctl2:MyTextBox。“_ctl2”代表 MyTextBox 所处的当前行。页面中其他 MyTextBox 实例的 ID 可能是 DataGrid1:_ctl3:MyTextBox、DataGrid1:_ctl4:MyTextBox 等等。要检索需要查找的“MyTextBox”值,需要对适当的 DataGridItem 调用 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
 '对 MyValue 执行操作
End Sub

  对 FindControl 调用的结果调用 CType,将会把返回值由 Object 类型强制转换成 TextBox 类型,以访问 .Text 属性。

  忘记在每个 Datagrid 事件中执行 .DataBind() 调用,从而导致回发

  一个常见的问题是:“当我点击 Datagrid 某一行中的 Edit(编辑)链接时,页面回发,且不包含任何数据。这是什么错误?”问题在于数据仅在页面第一次被调用时绑定到网格。在每个 Datagrid 事件(Edit、Update、Cancel、Page 或 Sort)中,请确保设置了 Datagrid 的 Datasource 属性(除非已经在 <asp:Datagrid> 声明中通过声明的方式进行了设置),并对 Datagrid 调用了 DataBind() 方法。

  运行时不必要地在 Datagrid 中动态创建 Datagrid 控件或列


  在某些业务和技术方案中,在运行时创建 ASP.NET 控件是必要的,也是完全合适的。例如,有时需要在选择其他页面选项后,才能在运行时确定用户界面。或是要创建一个复合服务器控件,其中的每个子控件都需要动态创建,因为无法以声明的方式创建这些子控件。如果遇到这些情况,请注意,提交页面时不要保留这些动态控件。必须在页面生命周期的早期,在每次回发时重新创建动态控件(例如在 Page_Init 事件中)。警言:创建控件要早,创建控件要勤。有关如何动态创建控件的详细信息,请参阅 Microsoft Knowledge Base 文章 HOW TO:Dynamically Create Controls in ASP.NET with Visual Basic .NET。

  然而,如果 Datagrid 应用程序中不是一定需要动态创建控件,请避免使用该技术,以免遇到麻烦。尽管可能创建动态 Datagrid,但它们会引发各种事件,这通常都会令人头疼。换句话说,不要动态创建控件,以避免因为创建控件使 ASPX 文件变得散乱。

ASP.NET中Datagrid常见错误

摘要:学习如何避免在使用 ASP.NET Datagrid 控件进行开发时可能发生的一些常见错误(本文包含一些指向英文站点的链接)。Datagrid 控件是 Microsoft® ASP.NET 中功...
  • jelink
  • jelink
  • 2006年09月11日 21:17
  • 524

ASP.NET中Datagrid常见错误(三)

  持续使用大型 ViewState  Datagrid 控件会在页面中添加大量的 ViewState,这一点令人讨厌,因为这会导致呈现给用户的页面的总体大小急剧增加。要使页面大小不增加,最简单的方法...
  • lee2001xp
  • lee2001xp
  • 2004年07月14日 08:03
  • 1196

ASP.NET中Web DataGrid的使用指南

很久以前就想写一些关于DataGrid/DataList的东西,但是一直以来,一方面自感所学未深,另一方面,总觉无从下笔,一拖再拖,离刚开始的念头已距一年有余。DataGrid/DataList在AS...
  • qdzx2008
  • qdzx2008
  • 2005年09月17日 23:30
  • 784

ASP.NET中Datagrid常见错误(一)

  摘要:学习如何避免在使用 ASP.NET Datagrid 控件进行开发时可能发生的一些常见错误。   Datagrid 控件是 Microsoft? ASP.NET 中功能最强、用途最广的 We...
  • lee2001xp
  • lee2001xp
  • 2004年07月14日 08:01
  • 1155

asp.net 中一次性更新DATAGRID中所有记录

在asp.net中,如何一次性更新datagrid中的所有记录呢?可以用如下的方法,首先,要对DATAGRID中要更新的列建立模版列,比如:asp:datagrid id="dgPopularFAQs...
  • mdot
  • mdot
  • 2004年12月19日 10:00
  • 1409

ASP.NET最常见错误提示

Runtime Error 运行时错误Description: An application error occurred on the server. The current custom erro...
  • heyanbin
  • heyanbin
  • 2008年06月02日 13:36
  • 373

为 ASP.NET Datagrid 创建自定义列

Marcie RobillardDatagridGirl.com 2003 年 9 月简介不得不承认,为 Microsoft® ASP.NET 编写 Datagrid 代码包括大量的重复工作。尽管我深...
  • 21aspnet
  • 21aspnet
  • 2004年10月24日 22:28
  • 1857

让Asp.NET的DataGrid可排序、可选择、可分页

   让Asp.NET的DataGrid可排序、可选择、可分页       DataGrid是Asp.NET中的一个重要的控件,经常我们都将DataGrid做成可分页的和可排序的,有时还需要加上选择功...
  • lihonggen0
  • lihonggen0
  • 2004年05月17日 17:02
  • 4114

ASP.NET中使用DataGrid显示数据

 版本:.NET Framework 1.1 DataGrid是ASP.NET中用于显示table类型数据的一个功能强大的控件,使用DataGrid控件可以轻松实现数据的分页显示及修改,并且拥有多种显...
  • colin915gao
  • colin915gao
  • 2007年04月22日 14:41
  • 2538

ASP.NET中利用DataGrid的自定义分页功能

ASP.NET中利用DataGrid的自定义分页功能 ASP.NET中利用DataGrid的自定义分页功能和存储过程结合实现高效分页 ASP.Net中的DataGrid有内置分页功能, 但是它...
  • u014739775
  • u014739775
  • 2014年05月12日 11:09
  • 1126
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ASP.NET中Datagrid常见错误(二)
举报原因:
原因补充:

(最多只允许输入30个字)