用微信扫一扫

镇江seo,镇江网站推广

400-6065-301

慕枫网络-镇江seo优化与网站建设服务商
宁波网站建设|宁波seo|24小时热线:镇江seo,镇江网站优化
宁波seo,宁波网站优化
镇江seo,镇江网站优化
ASP.NET中DataGrid的常见错误
mf_web |2019/02/18
    摘要:了解如何避免使用ASP.NET DataGrid控件开发时可能出现的常见错误。
    
    DataGrid控件是Microsoft ASP.NET中功能最强大、使用最广泛的Web控件之一,已被ASP.NET权威机构认可。尽管DataGrid控件易于使用,但也容易给用户带来麻烦。下面是许多人从初学者到有经验者所犯的一些错误。网络专家。你可以看到许多苦恼的用户在ASP中询问关于这些错误的问题。NET新闻组和论坛。遵循本文中概述的相当简单的步骤可以帮助您避免这些错误并节省大量开发时间。
    
    可以使用DataGrid创建列表数据而不使用它
    
    我知道您将不再使用下面显示的代码,但ASP.NET中的许多老式用户仍在继续使用它们:
    
    上述代码只能简化为:
    
    打电话给。数据绑定()方法。即使需要对HTML输出进行特殊控制,也可以在用户界面上重复记录集的内容时使用数据Web控件。
    
    忘记在页面加载事件中检查ispostback
    
    最常见的错误之一是忘记在数据绑定之前检查页的ispostback条件。例如,当数据报处于编辑模式时,忽略此检查将导致编辑的值被数据源中的原始值覆盖。但是,此规则至少有一个主要异常,请参阅继续使用large视图状态。
    
    下面是一个典型的页面加载事件,其中包含ispostback check.binggrid()是一个用于导入和设置数据报数据源以及调用databind()方法的例程。
    
    当需要更大的灵活性时,坚持使用自动生成的列
    
    如果DataGrid所在的环境需要DataGrid中的任何特殊格式或任何其他Web控件,则必须关闭AutoGenerate列。将AutoGenerateColumns属性设置为true(默认设置)的做法仅在最简单的DataGrid方案中有效。但对于几乎所有实际应用程序,此正确的做法必须将ty设置为false,并且必须在DataGrid声明的<columns><columns>部分显式指定列。Microsoft Visual Studio.NET用户可以使用属性生成器以图形方式创建这些列。
    
    注意:如果将autogenerate columns的设置保持为true,并在datagrid的<columns>节中指定columns,则最终将获得列的重复设置。系统将首先显示特殊声明的列,然后显示所有自动生成的列。
    
    尝试仅使用控件ID引用DataGrid项目中的控件
    
    很多人都没有意识到,在datagrid的template列下的itemtemplate中的控件(例如,具有mytextbox id的textbox控件)不能在以下代码中直接调用,也不能在aspx页面的<script>部分中调用,代码如下所示:
    
    dim myvalue as string=mytextbox.text
    
    此代码将导致可怕的名称mytextbox未声明错误。
    
    因为datagrid由多行(项目)组成,所以数据源中的每一行实际上都有一个单独的mytextbox实例。asp.net将控件层次结构中每个命名容器的ID添加到每个控件的ID之前,这样文本框将具有唯一的ID,这与页上所有其他控件的ID不同。例如,如果mytextbox在datagid1中,生成的id将是datagid1:_ctl2:mytextbox。uctl2表示mytextbox所在的当前行。页面上其他mytextbox实例的id可能是datagid1:_ctl3:mytextbox、datagid1:_ctl4:mytextbox等。要检索需要查找的mytextbox值,需要调用findcontrol方法在适当的DataGridItem上。DataGridItem用作文本框的父命名容器。代码:
    
    对findcontrol调用的结果调用ctype将强制从对象类型到文本框类型的返回值访问。文本属性。
    
    忘记执行。DataBind()在每个DataGrid事件中调用,导致回发
    
    一个常见的问题是,当我单击一行数据报中的编辑链接时,页面会在没有任何数据的情况下回发。这有什么问题问题是,只有在首次调用页时,数据才会绑定到网格。在每个DataGrid事件(编辑、更新、取消、页或排序)中,请确保设置了DataGrid的DataSource属性(除非在<asp:DataGrid>声明中声明性地设置了该属性),并且对DataGrid调用了DataBind()方法。
    
    运行时不必要地在DataGrid中动态创建DataGrid控件或列
    
    在某些业务和技术解决方案中,在运行时创建ASP.NET控件是必要和适当的。例如,有时在运行时确定用户界面之前,需要选择其他页面选项。或者创建一个复合服务器控件,其中每个控件都需要动态创建,因为这些子控件无法以声明方式创建。如果遇到这些情况,请注意,提交页面时不会保留这些动态控件。在页面生命周期的早期(例如,在页面初始化事件中),必须在每次回发时重新创建动态控件。警告:尽早创建控件,创建控件以使其更勤奋。有关如何要动态创建控件,请参阅Microsoft知识库文章如何:使用Visual Basic.NET在ASP.NET中动态创建控件。
    
    但是,如果不一定需要在DataGrid应用程序中动态创建控件,请避免使用此技术来避免麻烦。尽管可以创建动态DataGrid,但它们可能导致各种事件,这通常是一个难题。换句话说,不要动态创建控件来避免创建使ASPX成为文件杂乱。
    
    连续使用大视图状态
    
    DataGrid控件向页面添加了大量的ViewState,这很烦人,因为它可能会导致呈现给用户的页面的整体大小急剧增加。保持页面大小不变的最简单方法是对整个页面或单独对特定控件禁用ViewState。例如,如果页面不生成回发,它是安全的。若要禁用整个页面的视图状态,请对状态信息在两次回发之间不发生更改的控件或不需要隐藏字段来跟踪其状态的控件禁用视图状态。
    
    当对DataGrid控件或包含DataGrid的页禁用了ViewState时,如果DataGrid启动回发事件,则需要采取一些特殊步骤。首先,必须在每次回发时在页面加载中重新绑定DataGrid。这与常规做法(如上第二个问题所述)相反。但是,如果禁用了ViewState,此步骤是必需的,以便在执行页加载后可以正确触发其他DataGrid事件。如果要处理以下DataGrid事件的任何部分(或全部),还需要在ViewState中手动存储一些DataGrid属性。例如,在禁用ViewState的DataGrid中编辑时,只要EditItemIndex被重新设置为在页面加载中第一次数据报绑定之前存储,并且数据报处于编辑模式,在视图状态中存储EditItemIndex就足够了。
    
    表1:DataGrid事件和ViewState之间的依赖关系
    
    事件是否依赖于视图状态要存储在视图状态中的字段
    
    清单1:启用编辑、排序和分页,但禁用viewstate的datagrid示例代码。
    
    使用itemDataBound或itemCreated事件时,忘记检查适当的listemType
    
    DataGrid控件为每一数据行引发两个事件。第一次将每一行添加到DataGrid时,将触发itemCreated事件,并在数据绑定到每一行时触发itemDataBound事件。将单元格添加到DataGrid的表输出时,这些事件可用于控制每个cel的外观或内容。例如,可以根据值的范围修改单元格的背景色。但关键是要记住,这些事件是为所有数据报项目类型触发的,包括页眉、页脚和分页程序项目。如果在itemdatabound事件期间引用项的数据前未仔细检查项类型,则第一项(通常是标题行)将出错。如果DataGrid启用分页并将其设置为显示在顶部,则第一项将成为分页器项目。下面的示例代码显示如何在引用项目数据之前执行正确的ListItemType检查。不要忘记交替项!
    
    当需要对生成的HTML进行更多的控制时,过度使用数据报(中继器可能是更好的选择)
    
    如果懒惰的程序员喜欢数据报控件(因为数据报控件为他们做了很多工作),那么高度可控的程序员必须喜欢转发器控件。如果您需要或希望完全控制所有创建的HTML,请使用转发器控件,这有助于您完成此任务。转发器控件还具有轻微的性能优势because它们不像数据报控件的所有内置函数那样占用系统资源。您还可以考虑使用具有编辑和排序功能的受损数据列表控件,以及在一行中重复显示记录的能力。
    
    原网企网文章,本文地址:http://www.wangqi.com/html/2006-10/7201.htm,转载请注明出处。
    

成为你更加专业的技术合伙人

友情链接:

潍坊网站建设杭州网站设计台州网站建设公司深圳网站建设公司

Copyright © 2016-2017 慕枫网络 浙ICP备15047023号-4