在GridView中加入单选按钮RadioButton

1,放一个html单选控件:<input type="radio"...
2,放一个RadioButtonList;

这两种方法都有弊端;第一种如果我们要在后台取radiobutton的值就显得很麻烦,第二种会让我们不好布局,但是大家知道,如果仅仅是在GridView里面加入RadioButton,我们就实现不了单选,后面查阅了一老外的文章,找到了一种自认为比较好的方法,实现思路是:在后台给radiobutton加入个onclick属性,在前台当用户单击这个单选按钮的时候用js去遍历,取消其他单选的选择,下面是配合一个投票系统的代码,这个投票系统能够在后台自动生成是单选还是复选按钮,最后面的是一个实例.

<asp:Panel ID="literalVote" runat="server" Visible="false">
                 <asp:GridView ID="gridVote" runat="server" AutoGenerateColumns="False" BackColor="#B6C9E7" CssClass="tableBack" CellPadding="3" CellSpacing="1" ShowHeader="False" Width="100%" DataKeyNames="this_id,vote_type,this_title" OnRowDataBound="gridVote_RowDataBound">
                     <Columns>
                         <asp:TemplateField>
                            <ItemTemplate>
                               <asp:PlaceHolder ID="placeVote" runat="server" />
                            </ItemTemplate>
                             <ItemStyle BackColor="White" />
                         </asp:TemplateField>
                         <asp:TemplateField>
                            <ItemTemplate>
                               <asp:Image ID="voteImage" Runat="server" Height="8px" Width='<%# FormatImage(Convert.ToInt32(Eval("vote_num").ToString())) %>' ImageUrl="img/bar2.gif"></asp:Image><%#Eval("vote_num") %>
                            </ItemTemplate>
                             <ItemStyle Width="50%" BackColor="White" />
                         </asp:TemplateField>
                     </Columns>
                 </asp:GridView>
                 <div style="margin-top:5px;font-size:12px;color:#000000;">
                    <asp:Button UseSubmitBehavior="false" Text="我要投票" ID="buttonVote" runat="server" OnClick="buttonVote_Click" />&nbsp;【截至时间:<asp:Literal ID="literalTimeout" runat="server" />&nbsp;|&nbsp;<a href='voteuser.aspx?id=<%=Request.QueryString["id"] %>' class="aTitle" target="_blank">查看投票用户</a>】
                 </div>
             </asp:Panel>

js代码:

<script language="javascript">            function SetUniqueRadioButton(nameregex, current)
            {
               re = new RegExp(nameregex);
               for(i = 0; i < document.forms[0].elements.length; i++)
               {
                  elm = document.forms[0].elements[i]
                  if (elm.type == 'radio')
                  {
                     if (re.test(elm.name))
                     {
                        elm.checked = false;
                     }
                  }
               }
               current.checked = true;
            }
         </script>


后台代码:

protected void gridVote_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        PlaceHolder place = (PlaceHolder)e.Row.FindControl("placeVote");
        if (place != null)
        {
            if (gridVote.DataKeys[e.Row.RowIndex].Values["vote_type"].ToString().ToLower() == "false")
            { 
               //单选
                RadioButton radioVote = new RadioButton();
                radioVote.ID = "radioVote";
                string script = "SetUniqueRadioButton('gridVote.*Vote',this)";
                radioVote.Attributes.Add("onclick",script);
                //绑定数据
                //BindItemData(radioVote, Int32.Parse(gridVote.DataKeys[e.Row.RowIndex].Values["this_id"].ToString()));
                radioVote.Text = gridVote.DataKeys[e.Row.RowIndex].Values["this_title"].ToString();
                place.Controls.Add(radioVote);
               
            }
            if (gridVote.DataKeys[e.Row.RowIndex].Values["vote_type"].ToString().ToLower() == "true")
            {
               //多选
                CheckBox checkVote = new CheckBox();
                checkVote.ID = "checkVote";
                checkVote.Text = gridVote.DataKeys[e.Row.RowIndex].Values["this_title"].ToString();
                place.Controls.Add(checkVote);
            }
        }
    }
posted @ 2008-07-11 18:48  supers  阅读(913)  评论(0)    收藏  举报