zoukankan      html  css  js  c++  java
  • 关于CheckBoxList和RadioButtonList的几个问题

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

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

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

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

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

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

            }

      
  • 相关阅读:
    three.js raycaster射线碰撞的坑 (当canvas大小 不是屏幕大小是解决拾取物体的办法)
    如何去掉IE文本框后的那个X css代码
    解决input 有readonly属性 各个浏览器的光标兼容性问题
    centos的基本命令03(du 查看文件详情,echo清空文件内容)
    centos的 / ~
    centos的基本命令02
    centos的基本命令01
    关系性数据库和非关系型数据库
    绝对路径和相对路径的理解
    linux的目录和基本的操作命令
  • 原文地址:https://www.cnblogs.com/WuCountry/p/327746.html
Copyright © 2011-2022 走看看