背景:实现GridView的单选列,传统的做法应该是新增模板列,然后添加RadioButton,客户 端实现单选,后台遍历读取选中行数据。
第一:添加模板列,加入RadioButton。为了取值方便,我把记录的主键放在HiddenField中 保存。
<asp:TemplateField meta:resourcekey="TemplateFieldResource3">
<ItemTemplate>
<asp:RadioButton ID="rbChecked" runat="server" onclick="rbCheck(this.id)" />
<asp:HiddenField ID="hidID" Value ='<%# Eval("ID") %>' runat="server" />
</ItemTemplate>
</asp:TemplateField>
发现问题:生成的选择列并没有单选功能,解决过程:
1:设置RadionButton的GroupName,结果证明是不可行的。
2:RadionButton生成的html为input,可不可以设置name属性呢,结果也是不可行,因为 GridView生成数据行的时候,会修改这个name值,使得最终的name值各不相同。
解决方案:在RadioButton发生客户端点击事件时,动态设置其它选择按钮的选中状态。 例如上文中的onclick="rbCheck(this.id)"。这样可以实现单选的效果。
function rbCheck(obj)
{
var gv = $("<%=this .GridView1 .ClientID %>");
//被选择的个数
var num=0;
for(i = 1;i < gv.rows.length; i++)
{
var inputArray = gv.rows[i].getElementsByTagName ("input");
for(var j=0;j<inputArray.length;j++)
{
if(inputArray[j].type=='radio')
{
if(inputArray[j].id==obj)
{
inputArray [j].checked=true;
}
else
{
inputArray[j].checked=false;
}
}
}
}
}