dotNet平台模板列中的单选无效的解决方案
最近在grid里添加一个单选列,最开始直接创建一个模板列,然后在模板列里放一个radiobutton。并指定其GroupName。这是radiabutton最常用的方法。但是在Grid里,这样却毫无效果。
开始打算用javascript写响应radiobutton的onclick函数。思路的确可以。但是为什么radiobutton在grid里指定了其GoupName还是不能实现单选呢?
写了个测试用例。前台代码如下:(数据在后台绑定了)
<html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server">
<title>无标题页</title>
<script>
function setradio(grid,radio){
var grid=document.getElementById(grid);
var radios=grid.getElementsByTagName("input");
for(var i=0;i<radios.length;i++){
if(radios.type=radio&&radios[i]!=radio){
radios[i].checked=false;
}
}
}
</script> </head>
<body>
<form runat="server">
<div>
<asp:GridView runat="server">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:RadioButton runat="server" GroupName="chooze"/>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</div>
</form>
</body>
</html>
调试时Grid显示的页面为:
很明显,gird被解析成一个table。里面的radiobutton被解析成input。这个是很自然的。此外,VS还(通过添加前缀)刻意保证每个radiobutton的GroupName都不一样。所以在grid里通过指定其groupName的方式来使得模板列中的radiobutton为同一个组是行不通的(就是有点想不通为什么微软要这样做,可能是一个bug)。实现在grid里单选的比较简单的方法就是用javascript函数。就是上面前台代码的那个setradio()函数。
Bingo,go,go,go!