如何在DataList中控制单选按钮(Radio)

        在网上看了很多关于如何在DataList中创建和控制Radio的文章,这里也说说我在实际应用中的解决方案。当然,方法都是人想出来的,如果哪位达人有更好的方法,希望可以交流交流。

         背景:
        网上很多帖子都问在DataList(或者DataGrid)的ItemTemplate列中嵌入单选按钮,如何能实现单选功能。我们知道,由于DataList的内部原因(我们这里不深究), 页面发送到客户端的时候,会为它的每一个DataListItem中的控件的Name属性自动赋值。
         例如,DataList的ID为“DL”,嵌入DataList的单选按钮的Name值我们设为“radio”, 假设数据邦定后有3个DataListItem,那当页面发送到客户端的时候页面上的三个单选按钮的Name可能分别为"DL_ctl0_radio","DL_ctl1_radio","DL_ctl2_radio"。如此我们等到了三个完全不同的单选按钮,根本不可能实现三个按钮的单选效果。

         解决方案:
        我的解决方案就是我们在DataList数据绑定的时候动态写入Html代码。具体操作如下:
        我们通常为了排版的方便经常会在ItemTemplate列中先放入一个HtmlDataTable,然后再在各个表格(HtmlTableCell)内放入我们需要的控件。但是这里,我们需要你将其中一个表格设为服务器控件(例如:ID为CellForRadio)以便在后台可以获取得到。
        接着就是在数据绑定时向CellForRadio写入Html代码,如下所示:
None.gif private   void  DL_MyReport_ItemDataBound( object  sender, System.Web.UI.WebControls.DataListItemEventArgs e)
ExpandedBlockStart.gifContractedBlock.gif        
dot.gif {
InBlock.gif            HtmlTableCell CellForRadio;
InBlock.gif            
InBlock.gif
InBlock.gif            
if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                    dot.gif dot.gif
InBlock.gif                CellForRadio 
= (HtmlTableCell) e.Item.FindControl("CellForRadio");
InBlock.gif
InBlock.gif                CellForRadio.InnerHtml 
= "<input type=radio id='Radio"+index+"' runat='server' name='radio')>";
InBlock.gif                index
++;
InBlock.gif                dot.gif dot.gif
ExpandedSubBlockEnd.gif            }

ExpandedBlockEnd.gif        }

       这里我们看到我们将Radio的Name设为了radio,页面送到客户端也不会变化radio的name,这样我们就实现了radio的单选功能了,是不是很方便,但事情远没有我们想象的这么简单。
       大家看到我这里还设了radio的ID属性,并且用index动态改变ID值,这个index其实是一个全局变量,作用就不多说了。为什么要加一个ID属性了,其实是想把它变为服务器控件,因为单选功能实现了,接下来我们要做什么事情呢?是点击一个单选按钮就打开一个Panel;还是再点击一个Button,通过获取被选择的某个单选按钮的值去触发下一个事件,谁知道呢?但这下都是要让后台知道你究竟选择了哪个单选按钮。
        我们就挑在选取了单选按钮后,再去点击Button触发新事件这样一个场景来举例说吧,首先要让服务器端获知你选择了哪个单选按钮,如下所示:
None.gif private   void  btn_Execute_Click( object  sender, System.EventArgs e)
ExpandedBlockStart.gifContractedBlock.gif        
dot.gif {
InBlock.gif                dot.gif dot.gif
InBlock.gif                
for(int i = 0; i<DL.Items.Count; i++)
ExpandedSubBlockStart.gifContractedSubBlock.gif                
dot.gif{
InBlock.gif                   HtmlInputRadio rad_selected 
= (HtmlInputRadio)DL.Items[i].FindControl("CellForRadio").Controls[0];
InBlock.gif                   
if(rad_selected.Checked)
ExpandedSubBlockStart.gifContractedSubBlock.gif                   
dot.gif{
InBlock.gif                       
//DoSomething
ExpandedSubBlockEnd.gif
                   }

ExpandedSubBlockEnd.gif                }

InBlock.gif                dot.gif dot.gif
ExpandedBlockEnd.gif        }
        如此,我们就可以像使用普通控件一样使用操作单选按钮了。
       

转载于:https://www.cnblogs.com/Louistin/archive/2007/02/28/660067.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值