zoukankan      html  css  js  c++  java
  • GridView中自定义单选按钮列的实现!

    最近工作中需要实现GridView中单选按钮列,用于单选GridView中的数据行。经过研究,终于解决了这个问题,不过限于能力有限,还有点不足。
    实现思路:
    经过思考,觉得如何使GridView选中某一行,是关键。GridView自动生成的选择列,是通过点击时执行Javascript回发实现的。具体的Javascript形如:javascript:__doPostBack('gdvSample','Select$4'),研究发现:gdvSample是GridView的UniqueID(是UniqueID,并不是ID,也不是ClientID)。而Select$4更简单,“4”就是数据行的索引。
    如果我们在单选控件的onclick事件中调用这个脚本一定也可以实现。
    为了易于使用,减少代码修改量,经研究,决定通过集成实现BoundField类。

    具体实现,有兴趣的朋友可以参见代码。为了给大家解释,代码注释并没有可以规范书写(^_^也因为能力嘛。呵呵)。
    代码中,有两处向单元格中添加RadioButton控件,一处是重写的OnDataBindField方法中,用于初次绑定数据源时。另一处是重写的InitializeCell方法中,用于页面回发后,生成GridView时。

    主要代码:
    (一)
                /*
                 *
                 *有时候,页面不没有回发需要的脚本函数及一些Hidden元素,需要自己添加
                 *
                 */
                string postBackScript = "var _theForm = document.forms['" + gridView.Page.Form.ClientID + "'];"
                    + "if (!_theForm) {"
                    + "    _theForm = document." + gridView.Page.Form.ClientID + ";"
                    + "}"
                   
       (  省略的代码 )

                    + "function __doRBPostBack(eventTarget, eventArgument) {"
                    + "     if (!_theForm.onsubmit || (_theForm.onsubmit() != false)) {"
                    + "        _theForm.__EVENTTARGET.value = eventTarget;"
                    + "        _theForm.__EVENTARGUMENT.value = eventArgument;"
                    + "        _theForm.submit();"
                    + "     }"
                    + "}";

                gridView.Page.ClientScript.RegisterStartupScript(typeof(System.Web.UI.Page),
                    "GridView_RN_PostBackScript", postBackScript, true);


      这段代码是为了防止页面上没有支持PostBack的脚本函数及需要的__EVENTTARGET和__EVENTARGUMENT元素。


    (二)
                        rb.Attributes.Add("onclick", "javascript:__doRBPostBack('" +
                        gridView.UniqueID +
                        "','Select$" +
                        rowIndex.ToString() +
                        "')");

    这就是向RadioButton添加onclick事件函数。
    不足之处:
    由于功能简单,所以没有实现状态管理功能。对于GridView的选择行的索引,是在重写的Initialize方法中直接获取的。
    当GridView不可作为PostBack事件的目标控件时,需要 EnableEventValidation="false"语句来禁用页面的EventValidation。
    限于能力有限,无法在Page的Render事件中通过ClientScriptManager..::.RegisterForEventValidation注册GridView控件。遗憾!只好将事件验证禁用掉。

    欢迎指教:
    QQ:113560077
    MSN:fgq990302@hotmail.com
    代码文件:
    /Files/fgq841103/WebSite_RadioField.rar
  • 相关阅读:
    使用mongodb保存爬取豆瓣电影的数据
    使用scrapy爬取阳光热线问政平台
    使用scrapy爬取手机版斗鱼主播的房间图片及昵称
    使用selenium + chrome爬取中国大学Mooc网的计算机学科的所有课程链接
    使用scrapy爬取腾讯社招,获取所有分页的职位名称及chaolia、类型、人数、工作地点、发布日期超链接
    python2使用bs4爬取腾讯社招
    使用python2爬取百度贴吧指定关键字和分页帖子楼主所发的图片
    提问的智慧
    深刻理解系统架构师和系统分析师定义
    Redis基础数据结构与核心原理
  • 原文地址:https://www.cnblogs.com/fgq841103/p/1539109.html
Copyright © 2011-2022 走看看