关于CheckBoxList和RadioButtonList的几个问题

  其实我一向很少用关于"list"的控件,因为有DataGrid就基本上都搞定了,然而一方面是为了学习,另一方面也可以灵活的应用更多的控件,于是采用了其中的几个控件,但没想到结果令我大失所望。。。。

  先看看DataList控件,它的使用最郁闷的是不能在IDE环境里绑定数据,而只能用模板(不知道是不是我没学会)。
None.gif                      < asp:DataList  id ="DataList1"  runat ="server"  Width ="100%"  Visible ="False"  CssClass ="s_verdana"
None.gif                        RepeatDirection
="Horizontal"  ForeColor ="Black"  BorderColor ="#999999"  BorderStyle ="Solid"  BackColor ="Silver"
None.gif                        CellPadding
="1"  GridLines ="Vertical"  BorderWidth ="1px"  RepeatColumns ="4"  DataKeyField ="c_id" >
None.gif                        
< SelectedItemStyle  Font-Bold ="True"  ForeColor ="White"  BackColor ="#000099" ></ SelectedItemStyle >
None.gif                        
< AlternatingItemStyle  BackColor ="#CCCCCC" ></ AlternatingItemStyle >
None.gif                        
< ItemTemplate >
None.gif                            
< asp:CheckBox  Runat ="server"  Text ='<%#  DataBinder.Eval(Container, "DataItem.c_loginName")% > '>
None.gif                            
</ asp:CheckBox >
None.gif                        
</ ItemTemplate >
  数据绑定:
None.gif              this .DataList1.DataSource     =  m_table.DefaultView;
None.gif            
this .DataList1.DataKeyField     =   " c_id " ;
None.gif            
this .DataList1.DataBind();
  看上去和DataGrid一样不是吗?可问题是:这里我这里使用了CheckBox,也就是说用户到时候要选择其中的部份数据,然后提交回来,结果是:你很难得在DataGrid里取回绑定的数据列。。。。。

  再看RadioButtonList:
None.gif                  < asp:RadioButtonList  id ="RadioButtonList_MsgType"  runat ="server"  Width ="440px"  RepeatDirection ="Horizontal"
None.gif                    CssClass
="s_verdana" >
None.gif                    
< asp:ListItem  Value ="0"  Selected ="True" > All </ asp:ListItem >
None.gif                    
< asp:ListItem  Value ="1" > All Client </ asp:ListItem >
None.gif                    
< asp:ListItem  Value ="2" > All Users </ asp:ListItem >
None.gif                    
< asp:ListItem  Value ="3" > Sperical </ asp:ListItem >
None.gif                
</ asp:RadioButtonList >
  这里我只使用了静态的数据,因为这里并没有很多的数据显示。但有一点小问题:我想在上面加一个JavaScript事件,用来响应用户操作,于是我在后台添加代码:
None.gif          private   void  RadioButtonList_MsgType_Load( object  sender, System.EventArgs e)
ExpandedBlockStart.gifContractedBlock.gif        
dot.gif {
InBlock.gif            RadioButtonList m_obj = sender as RadioButtonList;
InBlock.gif            m_obj.Attributes.Add("onclick","alert()");
ExpandedBlockEnd.gif        }
  让我郁闷不以的是:::它并没有在radio添加Onclick事件,查看HTML源代码,差点没把我气死:原来它生成了一个Table,而这个RadioButtonList就是这个Table,而里面的Radio就是行与列了。
None.gif <table id="Inc_Admin_MsgManager1_Inc_WAVE_Messages1_RadioButtonList_MsgType" class="s_verdana" οnclick="alert()" border="0" style="width:440px;">
None.gif     < tr >
None.gif        
< td >< input  id ="Inc_Admin_MsgManager1_Inc_WAVE_Messages1_RadioButtonList_MsgType_0"  type ="radio"  name ="Inc_Admin_MsgManager1:Inc_WAVE_Messages1:RadioButtonList_MsgType"  value ="0"   />< label  for ="Inc_Admin_MsgManager1_Inc_WAVE_Messages1_RadioButtonList_MsgType_0" > All </ label ></ td >< td >< input  id ="Inc_Admin_MsgManager1_Inc_WAVE_Messages1_RadioButtonList_MsgType_1"  type ="radio"  name ="Inc_Admin_MsgManager1:Inc_WAVE_Messages1:RadioButtonList_MsgType"  value ="1"   />< label  for ="Inc_Admin_MsgManager1_Inc_WAVE_Messages1_RadioButtonList_MsgType_1" > All Client </ label ></ td >< td >< input  id ="Inc_Admin_MsgManager1_Inc_WAVE_Messages1_RadioButtonList_MsgType_2"  type ="radio"  name ="Inc_Admin_MsgManager1:Inc_WAVE_Messages1:RadioButtonList_MsgType"  value ="2"   />< label  for ="Inc_Admin_MsgManager1_Inc_WAVE_Messages1_RadioButtonList_MsgType_2" > All Users </ label ></ td >< td >< input  id ="Inc_Admin_MsgManager1_Inc_WAVE_Messages1_RadioButtonList_MsgType_3"  type ="radio"  name ="Inc_Admin_MsgManager1:Inc_WAVE_Messages1:RadioButtonList_MsgType"  value ="3"  checked ="checked"   />< label  for ="Inc_Admin_MsgManager1_Inc_WAVE_Messages1_RadioButtonList_MsgType_3" > Sperical </ label ></ td >
None.gif    
</ tr >
None.gif
</ table >
  这也算了,如果非要这样用也行,可以在它的子控件里再添加事件,这样可是麻烦多了。看看CheckBoxList,原理也一样,也就不多说了。
  回到DataList上来,看它如果用CheckBox来取回数据吧,先把所有的子控件都列出来:
None.gif          private   void  AddMessageRelations()
ExpandedBlockStart.gifContractedBlock.gif        
dot.gif {
InBlock.gif            
if(this.RadioButtonList_MsgType.SelectedIndex<3return;
InBlock.gif            CheckBox m_checkBox;
InBlock.gif            
for(int i=0;i<this.DataList1.Items.Count;i++)
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif
//                m_checkBox = this.DataList1.Items[i].Controls[0] as CheckBox;
InBlock.gif
//                if(m_checkBox.Checked)
InBlock.gif
//                {
InBlock.gif
//                    Response.Write(m_checkBox.Text);
InBlock.gif
//                }
InBlock.gif
                Response.Write("i="+i.ToString()+":"+this.DataList1.Items[i].ToString()+"<br/>");
InBlock.gif                
for(int j=0;j<this.DataList1.Items[i].Controls.Count;j++)
ExpandedSubBlockStart.gifContractedSubBlock.gif                
dot.gif{
InBlock.gif                    Response.Write(
"j="+j.ToString()+":"+ this.DataList1.Items[i].Controls[j].ToString()+"<br/>");
ExpandedSubBlockEnd.gif                }

InBlock.gif                Response.Write(
"<br>==================================<br>");
ExpandedSubBlockEnd.gif            }

ExpandedBlockEnd.gif        }
  看看结果:
FindChildControls.JPG 
  好了,清楚是怎么回事了就好办了。以下代码取得用户选定CheckBox的ID值。
None.gif          private   void  AddMessageRelations()
ExpandedBlockStart.gifContractedBlock.gif        
dot.gif {
InBlock.gif            
if(this.RadioButtonList_MsgType.SelectedIndex<3return;
InBlock.gif            CheckBox m_checkBox;
InBlock.gif            
for(int i=0;i<this.DataList1.Items.Count;i++)
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                m_checkBox 
= this.DataList1.Items[i].Controls[1as CheckBox;
InBlock.gif                
if(m_checkBox.Checked)
ExpandedSubBlockStart.gifContractedSubBlock.gif                
dot.gif{
InBlock.gif                    Response.Write(
this.DataList1.DataKeys[i].ToString()+":"+m_checkBox.Text+"<br>");
ExpandedSubBlockEnd.gif                }

InBlock.gif
//                Response.Write("i="+i.ToString()+":"+this.DataList1.Items[i].ToString()+"<br/>");
InBlock.gif
//                for(int j=0;j<this.DataList1.Items[i].Controls.Count;j++)
InBlock.gif
//                {
InBlock.gif
//                    Response.Write("j="+j.ToString()+":"+ this.DataList1.Items[i].Controls[j].ToString()+"<br/>");
InBlock.gif
//                }
InBlock.gif
//                Response.Write("<br>==================================<br>");
ExpandedSubBlockEnd.gif
            }

ExpandedBlockEnd.gif        }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值