Datalist等数据控件中嵌套RadioButton并实现单选点击Radiobutton显示对应的类别!Datalist嵌套radiobutton

今天做一个项目想要实现如下效果:

datalist控件中嵌套一个radiobutton(绑定所有行业网站的名称)-------->点击某个行业网站的单选按钮-------->对应的LISTBOX显示(显示该行业网站下面的大类)-------->点击大类---------->对应的LISTBOX显示(某个大类下面的小类别);

 

具体如图:

(这便是要实现的效果!用checkbox可以很轻松的实现,但是用radiobutton就不是那么容易了!)

 

主要代码:

  //这个是Datalist的绑定事件

 protected void DataList1_ItemDataBound(object sender, DataListItemEventArgs e)
    {

        Label cid = (Label)(e.Item.FindControl("cid"));
        RadioButton class1 = (RadioButton)(e.Item.FindControl("class1"));
        [class1.Attributes.Add("onclick", "clickit();");]-----这一句主要是给Radiobutton一个onclick事件(调用Js的clickit()方法主要实现单选的功能)
        cid.Text = DataBinder.Eval(e.Item.DataItem, "id").ToString();
        RequiredFieldValidator r1 = (RequiredFieldValidator)e.Item.FindControl("RequiredFieldValidator1");
        r1.Display = ValidatorDisplay.None;
        RequiredFieldValidator r2 = (RequiredFieldValidator)e.Item.FindControl("RequiredFieldValidator2");
        r2.Display = ValidatorDisplay.None;
    }

//下面这个是radiobutton的select_change事件即点击单选按钮的事件

  

        Response.Write(((RadioButton)sender).NamingContainer.NamingContainer.ClientID + "<br>");
        Response.Write(((RadioButton)sender).NamingContainer.ClientID+"<br>");
        Response.Write(((RadioButton)sender).ClientID + "<br>");
        -----NamingContainer 获取他父级的命名空间容器
        [foreach (Control lc in ((RadioButton)sender).NamingContainer.NamingContainer.Controls)
        {
           
            foreach (Control lac in lc.Controls)
            {
                if (lac is ListBox)
                {
                    ((ListBox)lac).Visible = false;
                }
            }
        }]------这句是主要的至于意思嘛说实话我自己都还不太明白所以上面我用了三个输出,呵呵你用过之后你就会明白是什么意思了!

                   主要目的获取Datalist的id,并循环里面的控件,嵌套一个foreach循环 目的都是为了查找listbox这个控件找到之后让其隐藏

                   我也没搞太懂还要慢慢研究下。。先把重要的先记下来留个参考。。 

    ------晚上研究下了发现上面循环两次滴原因了,Datalist控件生成之后会生成3层标识,第一层:Datalist1 第二层:Datalist1_clt001

                   第三层:Datalist1_clt001_ListBox1   汗死,这样要找到listbox1这个控件就得循环2次。。 
        if (((RadioButton)sender).Checked)
        {
            ListBox l1 = (ListBox)((RadioButton)sender).NamingContainer.FindControl("ListBox1");
            Label cid = (Label)((RadioButton)sender).FindControl("cid");
            l1.Visible = true;
            LoadListBox1(l1, cid.Text);
            RequiredFieldValidator r1 = (RequiredFieldValidator)((RadioButton)sender).NamingContainer.FindControl("RequiredFieldValidator1");
            r1.Display = ValidatorDisplay.Dynamic;
            RequiredFieldValidator r2 = (RequiredFieldValidator)((RadioButton)sender).NamingContainer.FindControl("RequiredFieldValidator2");
            r2.Display = ValidatorDisplay.Dynamic;
        }
        else
        {
            ListBox l1 = (ListBox)((RadioButton)sender).NamingContainer.FindControl("ListBox1");
            ListBox l2 = (ListBox)((RadioButton)sender).NamingContainer.FindControl("ListBox2");
            l1.Visible = false;
            l2.Visible = false;

            RequiredFieldValidator r1 = (RequiredFieldValidator)((RadioButton)sender).NamingContainer.FindControl("RequiredFieldValidator1");
            r1.Display = ValidatorDisplay.None;
            RequiredFieldValidator r2 = (RequiredFieldValidator)((RadioButton)sender).NamingContainer.FindControl("RequiredFieldValidator2");
            r2.Display = ValidatorDisplay.None;
        }

 //实现单选的js

 

<script type="text/javascript">
   
       function clickit() {
        var dom=document.all;
        var dd = document.getElementsByTagName("select");
        var el=event.srcElement;

      
       
        if(el.tagName=="INPUT"&&el.type.toLowerCase()=="radio")
        {
                for(i=0;i<dom.length;i++)
                {
                        if(dom[i].tagName=="INPUT"&&dom[i].type.toLowerCase()=="radio")
                        {
                                dom[i].checked=false; 
                        }
                }
        }
         el.checked=true;
}
    </script>

 

 

 

posted @ 2010-08-25 18:21  迷、踪  阅读(960)  评论(0)    收藏  举报