GridView中的RadioButton列与CheckBox列
GridView拥有大量的内置功能,可以使用不同的默认filed来放置显示诸如TextBox、Buttos等等控件,支持模板是GridView的最大的功能,可以添加额外的、GridView没有的功能,例如RadioButton列。
RadioButton可以让用户只选中一列,而CheckBox可以选中多列。
可能首先想到的GridView中不包含有RadioBox列,是在ItemTemplate中添加RadioBox列,好像不行,这些RadioBox不会相互排斥,最终是用户可以选中多列。
代码段1:
<asp:GridView ID="RadioCheck" runat="server" AutoGenerateColumns="False" DataSourceID="SqlDataSource1">
     <Columns>
         <asp:TemplateField HeaderText="."> 
             <ItemTemplate>
                 <asp:RadioButton ID="btnRadio" runat="server" GroupName="ProductGroup" />
             </ItemTemplate>
         </asp:TemplateField>
         <asp:BoundField DataField="ProductName" HeaderText="ProductName" />
         <asp:BoundField DataField="UnitPrice" HeaderText="UnitPrice" />
     </Columns>
</asp:GridView>

设置了GroupName:作用在于让RadioButton在一个组里,产生互斥的效果,只能选中一个,但这样的效果却是能选中多个值,如图Radio1.jpg

也就是说RadioButton没有起到要的作用,没有互斥性,查看源代码,可以发现问题:
<input id="RadioCheck_ctl02_btnRadio" type="radio" name="RadioCheck$ctl02$ProductGroup" value="btnRadio" />
<input id="RadioCheck_ctl03_btnRadio" type="radio" name="RadioCheck$ctl03$ProductGroup" value="btnRadio" />
........
<input id="RadioCheck_ctl10_btnRadio" type="radio" name="RadioCheck$ctl10$ProductGroup" value="btnRadio" />,上面的RadioButton根本没有在一个组里面,GroupName也起不了作用。
解决方法:
  1.移除RadioButton控件,换成Literal控件,ID为RadioButtonMarkup
  2.为GridView的RowCreated事件创建事件,RowCreated事件如下:只要在GridView中新增一行数据,就触发RowCreated事件,不用RowDataBound事件的原因是:只有当数据明确绑定到控件中才引发RowDataBound事件。处理如下:在每一行记录中,编程引用Literal控件,然后在其Text属性里面声明代码,创建RadioButton,name值为ProductGroup,id为RowSelectX,X为index值,value值也为index值。

protected void Product_RowCreated(object sender, GridViewRowEventArgs e)
{
  if(e.Row.RowType == DataControlRowType.DataRow)
  {
   Literal output = e.Row.FindControl("RadioButtonMarkup") as Literal;
   output.Text = string.Format(@"<input type="radio" name="ProductGroup"" " + @"id="RowSelector{0}"value="""value{0}",e.Row.RowIndex);
  }
}

当然这是后台使用的方法.
还有一种就是用Javascript脚本事件
.aspx

<script type="text/javascript">
    var last=null;
    function judge(obj)
    {
      if(last==null)
      {
         last=obj.id;
      }
      else
      {
        var lo=document.getElementById(last);
        lo.checked=false;
        last=obj.name;
      }
      obj.checked="checked";
    }
    </script>

.cs 页面里在gridview的 RowDataBound 事件里
   protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            RadioButton rb = (RadioButton)e.Row.FindControl("rdoChoose");
            if (rb != null)
            {
                rb.Attributes.Add("onclick", "judge(this)");
            }
        }
    }

注意:如果你有RadioButton同时还有别的JS事件,请一定要追加上,否则就不能正确显示了.我比较偏爱JS这种方法,速度快,而且试过了放在UpdatePannel里也可以.没有过多的复杂测试.

GridView中的RadioButton列之间不能互斥相关推荐

  1. android listview 列宽度,WPF中用ListView时使GridView中的每列宽度按比例变化并使内容自适应单元宽度...

    在使用ListView的时候,GridView中的每列宽度默认是没法按比例变化的,我们可以使用一个跟它同大小的Grid,给Grid设置相同数量的列,设置好每列的宽度,然后将其宽度绑定到GridView ...

  2. 使用JS实现将GridView中的TextBox列的值博给GridView外的一个文本筐

    实现在GridView中的TextTextBox列中的Textbox每添加一值,在该TextBox失去焦点时, GridView外面的TextBox自动添加该GridView中Textbox列中的Te ...

  3. R语言epiDisplay包的alpha函数计算dataframe数据中指定数据列之间的信度分析、克朗巴哈系数、标准化系数、每当剔除某一条目后系数的变化、设置reverse参数不对任何数据对象进行反序

    R语言使用epiDisplay包的alpha函数计算dataframe数据中指定数据列之间的信度分析.克朗巴哈系数(Cronbach's α).标准化

  4. R语言使用epiDisplay包的alpha函数计算dataframe数据中指定数据列之间的信度分析、使用alpha函数和基于业务筛选的数据列的列表计算Cronbach‘s α

    R语言使用epiDisplay包的alpha函数计算dataframe数据中指定数据列之间的信度分析.使用alpha函数和基于业务筛选的数据列的列表计算Cronbach's α 目录

  5. R语言epiDisplay包alpha函数计算dataframe数据中指定数据列之间的信度分析、克朗巴哈系数、标准化系数、每剔除某一条目后系数的变化、var.labels.trunc参数指定字符串长度

    R语言使用epiDisplay包的alpha函数计算dataframe数据中指定数据列之间的信度分析.克朗巴哈系数(Cronbach's α).标准化系数.每当剔除某一条目后系数的变化.使用var.l ...

  6. R语言使用epiDisplay包的alpha函数计算dataframe数据中指定数据列之间的信度分析、克朗巴哈系数、、每剔除某一条目后系数的变化、alphaBest函数获取最高alpha值对应的项目集

    R语言使用epiDisplay包的alpha函数计算dataframe数据中指定数据列之间的信度分析.克朗巴哈系数(Cronbach's α).标准化系数.每当剔除某一条目后系数的变化.使用alpha ...

  7. GridView中BoundField类型列的改行方法

    GridView中BoundField类型列的改行方法: <asp:BoundField HeadText="A<br/>B" HtmlEncode=" ...

  8. 解决无法获取 GridView 中BoundField 隐藏列值问题

    本文转自http://hi.baidu.com/xujie2453/blog/item/53cb9f33c1312fa35fdf0e29.html 转载该文的目的就是让更多的网友看到该文,以免受此问题 ...

  9. GridView 中设置某列,截取字符串加... 和 鼠标放上去字符全部显示

    使用模版列 <asp:TemplateField ><HeaderStyle Width="240px" /><HeaderTemplate>商 ...

最新文章

  1. 京东姚霆:推理能力,正是多模态技术未来亟需突破的瓶颈!
  2. jquery iframe 返回上一页_你不需要jQuery
  3. phpfind mysql怎么用_MySQL 的 find_in_set 函数使用方法
  4. 《netty实战》阅读笔记(2)——Netty 的数据容器ByteBuf
  5. Python之smtpd及smtplib(邮件服务器及客户端)
  6. IntelliJ IDEA 修改缓存文件设置
  7. 数据结构之 栈与队列(一)
  8. java 通过反射获取数组
  9. JDK帮助文档无法打开的常见问题和解决办法
  10. 读《VBScript程序员参考手册》,做的笔记
  11. 机器视觉硬件选型相关知识
  12. 【统信UOS】扫描仪设备管理驱动安装
  13. 工商管理硕士(MBA)提前面试案例与技巧
  14. 推动和规范编程教育纳入中小学相关课程加强师资建设(2020)
  15. ELK 收集中断错误处理
  16. 强大的GeoPandas,几行代码实现点转线功能
  17. s905l android5,魔百盒M101晶晨S905L处理器专用安卓纯净刷机rom固件
  18. 如何将电脑文件自动备份到u盘?
  19. Web Spider 常见混淆EVAL、AA、JJ、JSFUCK
  20. Linux 登陆 分辨率,Linux系统登陆前后 分辨率不一致的问题

热门文章

  1. 【Groovy】MOP 元对象协议与元编程 ( 使用 Groovy 元编程进行函数拦截 | 重写 MetaClass#invokeMethod 方法实现函数拦截 | 实现函数调用转发 )
  2. 【C 语言】数组 ( 数组相关地址 | 数组首元素地址 | 数组地址 )
  3. 【Flutter】Dart 数据类型 ( dynamic 数据类型 )
  4. 【计算理论】计算理论总结 ( 自动机设计 ) ★★
  5. linux 下mongo 基础配置
  6. python版本的策略模式
  7. python_selenium之第一个自动化脚本
  8. 初学jQuery之jQuery虚假购物车-------与真实数据无关
  9. result的type属性
  10. linux权限补充:rwt rwT rws rwS 特殊权限