先看效果图:

其实就是个一览定制的效果,只不过由于项目的需要,需要使用GridView进行设计,至于为什么不直接使用Html+JQuery,还是因为项目需要,不然维护起来会很麻烦,在制作的过程中会遇到以下几点,记录一下:

1.使用鼠标选择GridView行

要想实现GridView相应鼠标事件,明显是需要Js支持的,为了操作简便和提高可维护行,在这里使用ASP.net的ScriptManager在页面绘制的时候把Js事件给加进去:

代码:

控件绘制时加入Js事件处理

        foreach (GridViewRow row in this.gvAllProcessItem.Rows)        {

if (row.RowType == DataControlRowType.DataRow)            {//对整行添加Js事件onclick//事件被激发后自动回传,回传的参数为需要激发事件的GridView和事件发生的行的ClientID                row.Attributes["onclick"] = ClientScript.GetPostBackEventReference(this.gvAllProcessItem, "Select$" + row.RowIndex.ToString(), true);                row.Attributes["style"] = "cursor:pointer";            }        }

foreach (GridViewRow row in this.gvSelectedProcess.Rows)        {

//不能对整行添加事件//如果对整行添加事件,则下拉列表和Textbox的onclick也会被不会并引发回传            if (row.RowType == DataControlRowType.DataRow)            {                row.Cells[0].Attributes["onclick"] = ClientScript.GetPostBackEventReference(this.gvSelectedProcess, "Select$" + row.RowIndex.ToString(), true);                row.Cells[1].Attributes["onclick"] = ClientScript.GetPostBackEventReference(this.gvSelectedProcess, "Select$" + row.RowIndex.ToString(), true);

                row.Attributes["style"] = "cursor:pointer";            }        }//调用基类继续进行页面的绘制        base.Render(writer);

通过上面的处理,在用户使用鼠标点击对应的单元格或行后回激发相应GridView的SelectIndexChange事件,在捕获到该事件后只需进行

    protected void gvAllProcessItem_SelectedIndexChanging(object sender, GridViewSelectEventArgs e)    {        gvAllProcessItem.SelectedIndex = e.NewSelectedIndex;//setGvAllProcessItem();    }

2.在GridView中使用代码动态绘制控件

如例子所示,在用户选择特定的下拉列表值后,会在后面出现Textbox,这些Textbox是使用代码在行绑定上绘制上去的,这里牵涉到动态绘制的代码的获取问题,在GridView中绘制的控件在页面回传之后会丢失,需要重新进行绘制,所以在页面回传之后是无法获得这些动态绘制的控件的,想要取得用户在控件中输入的值需要使用Request.Form来获得表单数据,浏览器在回传表单数据时使用的ID是由Asp.net转成Html之后生成的clientId ,获得ClientID的方法是:如果不是嵌套控件,也就是说在使用服务器控件时ID不能重复的控件,可以直接使用ID.ClientID 来获取,如果是可以嵌套的控件,如:GridView行里面的控件,则其对应的ClientID是和行有关的需要首先获取行的ClientID,具体方法是:gvRow.UniqueID + "$"+ID;即可获得该ID对应的ClientID,

由上可见还是多用HTML控件吧.....

3.UpDatePanel控件

其实很多人都看的出,如果不用Ajax,只用上面的方法,页面早就被刷的受不了了,使用Ajax的时候个人倾向于使用JQuery手工传递Ajax信息,感觉这样比较灵活,便于掌控,同样是由于项目维护的原因....还是使用UpDatePanel...第一次使用这个东西,发现微软确实把什么都弄的很简单,只需要把想要异步回传的控件放在UpdatePanel中里面就好了,在使用之前需要加入<ScriptManager>控件,但是使用这些控件运行时候会大量报错,所以一般需要注意一下几点:

1.<ScriptManager>最好直接放在<Form>的声明下面

2.<system.webServer>下的<handlers>里面需要配置上:

View Code

<add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/><add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/><add name="ScriptResource" preCondition="integratedMode" verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

3.如果还不行,发布的时候记得把Debug给关掉

转载于:https://www.cnblogs.com/wk1234/archive/2011/12/16/2289242.html

使用GridView做出列选择效果(获取动态生成的控件.鼠标点选GridView.Ajax控件)相关推荐

  1. android imagebutton 动画,Android:单击时获取动态生成的ImageButton的ID

    我必须做同样的事情,这就是我所做的 for(int i = 0 ;i view_media_gallery_item = LayoutInflater.from(view.getContext()). ...

  2. 聚焦到Windows的窗口,激活窗口获取键盘输入,不需要鼠标点击,C++接口,focus, active, foreground

    情景 假设windows上开了2个窗口,分别叫WinA和WinB: 点击WinB后,WinA失去焦点,但我想让WinA获得焦点,获得键盘输入. 做法: 1.激活WinA 2.让WinA置于前面 3.聚 ...

  3. Jsoup获取动态js生成的内容

    Jsoup本身是只能获取到静态页面的数据,并无法获取动态生成的内容,所以单单使用jsoup是无法获取到js生成的内容的.我这里使用了htmlunit来获取网页内容后,将网页转换成xml格式,再通过js ...

  4. asp mysql 可编辑树状,基于数据库动态生成树形目录-ASP教程,数据库相关

    一. 目录树的广泛应用 为了这段内容,在百度上搜了搜,内容一大通,相关的竟没有.搜什么搜嘛?用处不是明摆着吗?资源管理器文件夹的管理,论坛中多级论坛的管理,java中的awt正是缺乏包括树形目录这样的 ...

  5. 动态生成的dom为什么绑定事件会失效,以及如何解决

    之前做项目都是直接用jquery的bind绑定事件,不过当时都不是动态生成dom元素,而是已经页面中原本存在的dom元素进行事件绑定,最近在测试给动态生成的dom绑定事件的时候发现事件失效,于是就测试 ...

  6. ajax使用json下拉框,ajax请求后台得到json数据后动态生成树形下拉框的方法

    如下所示: $(function(){ $.ajax({ url:"departmentAction_getAllDep.action", type:"post" ...

  7. 自己做一个table插件 (一)Ajax获取数据后动态生成table

    今天我给大家带来一个简单的JQ插件,Ajax获取数据后动态生成table.当然,有这种功能的插件有很多.著名的有DataTable.JqGrid--它们虽然功能丰富,成熟,拿来做二次开发是一个不错的选 ...

  8. 动态生成表格呈现还是将表格直接绑定gridview等控件呈现的开发方式选择依据...

    动态生成表格呈现还是将表格直接绑定gridview等控件呈现的开发方式选择依据:由存储过程决定,如果编写的存储过程可以生成需要呈现的表格则直接绑定,否则要动态生成表格 转载于:https://www. ...

  9. 动态生成的DOM做点击事件无效

    有时候我们的标签都是从后台获取的数据,然后利用JS添加到页面上,当我们写生成的标签的点击事件(click)时没有效果. 例如: <section>测试动态生成的DOM点击事件<br ...

最新文章

  1. HTTP POST GET 区别详解
  2. C#多维数组与嵌套数组
  3. 什么? 搞不定redis分布式锁?
  4. css 背景属性 0302
  5. 618期间, “直播带货”翻车负面信息暴增
  6. 获取指定文件目录路径下的所有文件
  7. Delphi循环语句 -For
  8. 关系代数 元组关系演算
  9. 回归预测 | MATLAB实现GLM广义线性模型数据回归预测
  10. QQ聊天记录的相关代码
  11. 112 洪聖民 捽翁
  12. 树莓派(Raspberry Pi 4 Model B)编译64位内核Kernel
  13. jquery 封装幻灯插件_21个jQuery幻灯片插件
  14. 关于AI-人工智能看法,进行漫谈。
  15. 一个爬取图片的app
  16. 如何成为稀缺性人才?
  17. 《哲学史讲演录》——思辨节选---塞诺芬尼 、巴门尼德
  18. 科学计算法(e/E表示规则)
  19. hello,intel TBB
  20. 随机数rand和srand的用法

热门文章

  1. nginx ------反向代理和负载均衡
  2. 使用WGAN生成手写字体
  3. 扩展 lua require 的行为
  4. Model compatibility cannot be checked because the database does not contain model metadata
  5. 灵活运用 SQL Server 数据库的 FOR XML PATH
  6. 【Android】线程池
  7. Fiddler抓取https相关设置
  8. 【opencv】VideoCapture打不开本地视频文件或者网络IP摄像头
  9. Referenced file contains errors (http://www.springframework.org/schema/beans/spring-beans-4.3.xsd).
  10. x1c 2017 安装mint18的坑——grub2