欢迎光临
我们一直在努力

DataGrid Web控件深度历险(3) part2-.NET教程,组件控件开发

建站超值云服务器,限时71元/月

点击按钮时让一些事情发生

现在已将按钮添加到datagrid中了,我们希望将服务器端的代码与按钮关联起来,这样当按钮被点击时可发生一些动作。在认识到datagrid中的buttoncolumn按钮被点击时itemcommand事件将被触发后,那么我们就可为这个事件编写服务器端的事件处理程序。这个事件处理程序必须定义如下:

sub eventhandlername(sender as object, e as datagridcommandeventargs)



end sub

一旦在服务器端代码块(或代码后置页)中定义了此过程,你可通过在datagrid的标记中增加onitemcomman属性的方法将datagrid的事件与该事件处理程序联系起来,如下所示:

<asp:datagrid runat="server"



onitemcommand="eventhandlername">



</asp:datagrid>

下面的代码演示了当datagrid中某个按钮被按下时,事件处理程序如何运行:

<script language="vb" runat="server">

sub page_load(sender as object, e as eventargs)

if not page.ispostback then

binddata() only bind the data on the first page load

end if

end sub

sub binddata()

make a connection to the database

databind the datareader results to the datagrid.

end sub

sub detailsclicked(sender as object, e as datagridcommandeventargs)

response.write("you clicked one of the details buttons!")

end sub

</script>

<form runat="server">

<asp:datagrid runat="server" … >



</asp:datagrid>

</form>

示例运行结果如下:

包含事件处理程序的datagrid

本示例显示一个包含detail按钮的datagrid web控件并演示了当按下按钮时如何触发一段代码。点击某个detail按钮,你将会在status文本旁看到一个消息,他指出了你点击了这个按钮!

status: you clicked one of the details buttons!

faq details

faq id

faq description

144

where can i host my asp web site for free (similar to geocities or tripod or any of the many other free web site sites)?

181

how can i format numbers and date/times using asp.net? for example, i want to format a number as a currency.

源代码:

<% @import namespace="system.data" %>

<% @import namespace="system.data.sqlclient" %>

<script language="vb" runat="server">

sub page_load(sender as object, e as eventargs)

if not page.ispostback then

binddata()

end if

end sub

sub binddata()

1. create a connection

dim myconnection as new sqlconnection(configurationsettings.appsettings("connectionstring"))

2. create the command object, passing in the sql string

const strsql as string = "sp_popularity"

dim mycommand as new sqlcommand(strsql, myconnection)

set the datagrids datasource to the datareader and databind

myconnection.open()

dgpopularfaqs.datasource = mycommand.executereader(commandbehavior.closeconnection)

dgpopularfaqs.databind()

end sub

sub dispdetails(sender as object, e as datagridcommandeventargs)

lbloutput.text = "you clicked one of the details buttons!"

end sub

</script>

<form runat="server">

<b>status:</b> <asp:label id="lbloutput" runat="server" font-italic="true" />

<p>

<asp:datagrid runat="server" id="dgpopularfaqs"

backcolor="#eeeeee" width="85%"

horizontalalign="center"

font-name="verdana" cellpadding="4"

font-size="10pt" autogeneratecolumns="false"

onitemcommand="dispdetails">

<headerstyle backcolor="black" forecolor="white" font-bold="true" horizontalalign="center" />

<alternatingitemstyle backcolor="white" />

<columns>

<asp:buttoncolumn text="details" headertext="faq details" commandname="details" buttontype="pushbutton" />

<asp:boundcolumn datafield="faqid" headertext="faq id" />

<asp:boundcolumn datafield="description" headertext="faq description" />

</columns>

</asp:datagrid>

</form>

这里还有一件非常重要的事情需要注意:我们仅在第一次页面访问时执行数据库查询并对datagrid进行绑定。在page_load事件处理程序(每次页面装载时被触发)中,我们检查页面是否被回发(posted back)。如果没有,那么就知道是第一次访问这个页面。在此情况下我们通过数据库查询生成一个datareader,将datagrid的datasource属性设为这个datareader,并调用datagrid的databind()方法。

当有人点击datagrid中某个detail按钮时,asp.net web页面将执行回发,页面又将在服务器端执行。page_load事件处理程序将再次被激活,但是这次因为我们在执行回发,binddata()过程将不会被调用。此外detailsclicked事件处理程序将被执行。注意如果我们每次在页面装载时均将数据绑定至datagrid(也就是说我们省略了if not page.ispostback检查),detailsclicked事件处理程序将不会执行,因为重新绑定datagrid将会清空(flush out)itemcommand事件。(请重新阅读上面的两段文字-根据各位对datagrid的了解,你们很有可能忘记执行回发检查并导致datagrid不能触发针对按钮的事件处理代码。相信我,这件事在我身上多次发生!j)

虽然本例分析了如何将事件处理与按钮的点击联系起来,我们仍然需要知道如何判断datagrid那一行中的按钮被点击。这是一个非常重要的问题,并将在本文下一部分进行研究。

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » DataGrid Web控件深度历险(3) part2-.NET教程,组件控件开发
分享到: 更多 (0)