扩展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;
                   }
                  }
             }
          }
}