在ASP.NET Web应用程序中,经常需要从数据库动态插入数据,并希望在不刷新整个页面的情况下更新页面上的数据显示。本文将介绍如何使用ASP.NET控件,如GridView、SqlDataSource、LinkButton、Panel、ModalPopupExtender和UpdatePanel,来实现这一功能。
要实现这个功能,需要以下步骤:
以下是详细的实现步骤:
首先,创建一个GridView控件(GridView1),用于显示Northwind数据库中Categories表的数据行。
然后,设置一个SqlDataSource控件(SqlDataSource1),用于从数据库获取数据并绑定到GridView。
接下来,添加一个LinkButton控件(LinkButton1),用户点击此按钮时,可以插入新的数据行到Categories表。
为了提供插入新数据的界面,使用Panel控件(Panel1)和ModalPopupExtender控件(ModalPopupExtender1)。ModalPopupExtender的PopupControlID属性设置为Panel1,这样当用户点击LinkButton1时,Panel1面板就会弹出。
Panel1包含适当的数据输入文本框、确定按钮(OkButton)和取消按钮(CancelButton)。这两个按钮通过ModalPopupExtender的OkControlID和CancelControlID属性连接。此外,OnOkScript="onOkClick()"属性声明在用户点击OkButton按钮时执行onOkClick() JavaScript函数。
onOkClick() JavaScript函数在客户端执行。它收集用户输入,并异步调用DB.AddCategory Web(和脚本)方法。DB.AddCategory将新的数据行插入到数据库中。由于这是一个异步调用,因此也定义了成功(onAddSuccess)和失败(onAddFailure)回调函数。
注意onAddSuccess回调函数中的_doPostBack调用。这是为了调用OkButton控件的服务器回发所必需的代码。注意,由于在ContentPlaceHolder中,OkButton的ID可能是"ctl00ContentPlaceHolder01OkButton",这是JavaScript代码必须知道的。
此时,执行OkButton_Click方法的服务器端代码。它所做的就是使数据绑定的GridView重新绑定到SqlDataSource。通常,这将导致浏览器中的整个网页刷新,这是不希望的。真正想要的是刷新GridView而不刷新页面效果。这就是为什么将GridView放置在UpdatePanel控件中的原因。
接下来的问题是如何使UpdatePanel在新数据行插入数据库后立即更新。简而言之,只需要设置正确的触发器。但是,是哪个控件呢?
如果认为LinkButton应该是触发器,那么就错了。答案是Panel1中的OkButton控件必须是更新UpdatePanel的触发器。这就是为什么在异步Web服务调用完成后立即对OkButton进行回发。回发导致触发器触发,然后UpdatePanel和GridView(新数据行显示为网格行)一起更新。设置触发器非常简单:
<Triggers>
<asp:AsyncPostBackTrigger ControlID="OkButton" EventName="Click" />
</Triggers>
最后但并非最不重要的是,确保将UpdatePanel的UpdateMode属性设置为"Conditional"。另外,不要忘记使DB Web Service对JavaScript代码可用:
<asp:ScriptManager ID="ScriptManager1" runat="server">
<Services>
<asp:ServiceReference Path="DB.asmx" />
</Services>
</asp:ScriptManager>