Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 编程语言 > .NET > C#.NET > DataGrid,HeadTemplate and Client-Side Script
【标  题】:DataGrid,HeadTemplate and Client-Side Script
【关键字】:DataGrid,HeadTemplate,and,Client-Side,Script
【来  源】:http://blog.joycode.com/roboo/archive/2004/09/08/32879.aspx

DataGrid,HeadTemplate and Client-Side Script

Your Ad Here

首先声明我是Asp.Net菜鸟(虽然我从Beta1就开始学习),最近忙里偷闲给老婆做一个知识管理系统。有所感悟,贴到随笔里面,欢迎大家指正。

DataGrid真的是一个好东西,不光是方便的解决的数据列表和分页的问题。对于Editable Grid的支持也不错,虽然比起当初我在Asp时代的全部用JavaScript生成的那个Editable Grid的功能差了一些,不过我那个东东的封装可是没有人家这个这么直接。好在DataGrid提供的功能已经能够足够满足大多数的应用。

Editable Grid 

HeadTemplate中最让人感觉受不了的就是没有onClick的Server-Side事件,据我所知国人非常喜欢用href的onClick来实现很多的功能,最终选择了来实现对选中的记录的删除,删除本身是很好实现的,问题是我们一般在删除的时候习惯于对用户提示是否删除,而我们知道Server-Side是不可能提供这样的功能的。因此我们必须想办法使用Client-Side的脚本代码。
问题是这样的Client-Side的代码如何同我们的代码关联起来呢?
通过查询MSDN,我们知道了四种方法可以实现ClientScript的功能,分别是
1.
GetPostBackEventReference
2 RegisterArrayDeclaration
3 RegisterClientScriptBlock
4 RegisterStartupScript
其中,GetPostBackEventReference一般在user custom control中使用,我们在这里不做讨论Kaneboy's Blog尚有一个例子,我们着重讨论一下剩余的三个Register函数的用法。
RegisterArrayDeclaration向客户端声明一个Client Array以便 Client Script使用
RegisterClientScriptBlockRegisterStartupScript 的区别在于,RegisterStartupScript 一般都只有一行代码,而且RegisterClientScriptBlock将ClientScript放在开始的地方,而RegisterStartupScript 将代码放在结束的位置。

OK,有了这些知识以后,我们开始下面的代码。首先我们需要为我们的ImageButton增加Attributes,可是我们如何去得到这个ImageButton呢?这个Button是Grid的内部控件,我们在ItemDataBound事件中通过下面的代码得到

        Dim InnerControl As Control

        InnerControl = e.Item.FindControl("delLink")

        If Not InnerControl Is Nothing Then

            Dim InnerButton As ImageButton

            InnerButton = CType(InnerControl, ImageButton)

            InnerButton.Attributes.Add("onclick", "return confirm(确认要删除吗?');")

        End If

这段代码执行起来没有任何问题,但是这个时候我们自然会有这样的想法,如果这个ClientScript代码非常复杂的话,我们该如何来处理呢?说起来,这个问题其实也很常见,比如我们如果想将最后的一句话修改成为

         InnerButton.Attributes.Add("onclick", "return confirmDel();")

我们自然会想到 这样的方法,不错这个方法很好,不过别着急。这样的努力是不会成功的,虽然我们把这样的运行的代码另存成HTML以后,我们会发现Js代码按照我们的预期执行了,但是在运行模式下,这样的不会成功的。解释如下:“ASP.Net can only emit code where there is either databinding <%# %>or runat=server. Thus, the "standard processing area" is the area. This is required for ASP.Net to function and therefore only allows dynamic content to be added between the

tags.

不过既然这样,我们也不要去强求,我们可以利用下面的代码使得我们的工作顺利进行下去:

        Dim scriptFile As System.IO.File

        Dim readStread As System.IO.StreamReader

        readStread = scriptFile.OpenText(Server.MapPath("MemberManage.js"))

        Dim strScript As String

        strScript = readStread.ReadToEnd()

        readStread.Close()

        strScript = " "

        If (Not Page.IsClientScriptBlockRegistered("clientScript")) Then

            Page.RegisterClientScriptBlock("clientScript", strScript)

        End If

 

Link:http://weblogs.asp.net/asmith/articles/25465.aspx

好奇怪,这个Post的原来的样子在我的机器上显示非常正常,可是大家普遍反映字体太小,现在该了一个特别大的字体,似乎是好多了,真的好奇怪。

参加TechEd:【上一篇】
也谈直接下载一个文件:【下一篇】
【相关文章】
  • .net 2.0 WinForm 中的 DataGridView 的增加记录事件
  • [JavaScript]几种常用的表单输入判断
  • tarball shell script
  • SSL and Certificates
  • Beating Spam and Viruses with amavisd-new
  • Fighting Spam/Viruses with Amavisd-New, Maia and P
  • Postfix+Openwebmail+虛擬帳號 On Mandrake 9.2
  • daily log with customer and coworker
  • meeting log with Rongguang, Mr. Fu, and Jason
  • Random Image Rotation
  • 【随机文章】
  • iBATIS的Date数据类型
  • Linux usb启动盘制作
  • asp.net如何编写自定义控件
  • 无线老是有问题!
  • 系统内置的4种网络测试工具!
  • Microsoft treeview background problem.
  • pb168,你说的这个的确是个问题
  • 如何在VMWare中启用共享SCSI磁盘搭建群集
  • C++对象布局及多态实现探索之虚函数调用
  • datagrid点删除,弹出一个确认和取消的消息框
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 bbb软讯网络 All Rigths Reserved.