Welcome 微信登录

首页 / 网页编程 / ASP.NET / 扩展GridView之添加单选列

扩展GridView之添加单选列2011-04-17 博客园 姜敏背景:实现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;
}
}
}
}
}