本帖最后由 cyh027 于 2013-06-11 18:54:26 编辑

解决方案 »

  1.   

    不用动态添加。实现就放好,隐藏显示,用时再取消隐藏Visiable=true。
      

  2.   

    把你的Panel换成DataList,然后使用数据绑定方法(设计你的DataList模板)来显示n个CheckBox。去学学DataList控件的使用吧。
      

  3.   

    先谢谢两位,datalist没有用过,我去研究下,有没有办法可以调用panel容器中动态生成的checkbox的属性呢?
      

  4.   

    先谢谢两位,datalist没有用过,我去研究下,有没有办法可以调用panel容器中动态生成的checkbox的属性呢?
      

  5.   

    先谢谢两位大侠的帮忙,DataList没有用过,刚刚看了下说明要绑定DATASET什么的感觉有点麻烦,因为我的程序不光要求要知道哪些CheckBox被选了,还得在生成的时候,根据一些数据来生成被勾状态,这得要完全设计另一种结构。请问还有别的办法调用和设置已知ID属性的动态生成的控件的属性吗?
    比如:知道有三个动态生成的CheckBox控件的ID分别为"a1” 、“a2”、“a3”,我需要在页面的提交按钮中调用这三个控件的Checked属性,请问这里的命令要怎么写啊?
      

  6.   

    public partial class test : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            //if (!Page.IsPostBack) //这里不能使用!Page.IsPostBack
            //{
                CheckBox cb1 = new CheckBox();
                cb1.ID = "ckbox1";
                cb1.Text = "1";
                CheckBox cb2 = new CheckBox();
                cb2.ID = "ckbox2";
                cb2.Text = "2";
                CheckBox cb3 = new CheckBox();
                cb3.ID = "ckbox3";
                cb3.Text = "3";
                Panel1.Controls.Add(cb1);
                Panel1.Controls.Add(cb2);
                Panel1.Controls.Add(cb3);
            //}
        }
        protected void Button1_Click(object sender, EventArgs e)
        {
            string _ck_val = string.Empty;
            CheckBox cb1 = (CheckBox)Page.FindControl("ckbox1");
            if (cb1.Checked)
            {
                _ck_val = _ck_val + "1";
            }
            CheckBox cb2 = (CheckBox)Page.FindControl("ckbox2");
            if (cb2.Checked)
            {
                _ck_val = _ck_val + "2";
            }
            CheckBox cb3 = (CheckBox)Page.FindControl("ckbox3");
            if (cb3.Checked)
            {
                _ck_val = _ck_val + "3";
            }
            Response.Write(_ck_val);
        }
    }
      

  7.   

    public partial class test : System.Web.UI.Page
    {
        private CheckBoxList cbl = new CheckBoxList();    protected void Page_Load(object sender, EventArgs e)
        {      
            cbl.ID = "cbl1";
            cbl.Items.Add(new ListItem("选项1", "0"));
            cbl.Items.Add(new ListItem("选项2", "1"));
            cbl.Items.Add(new ListItem("选项3", "2"));        Panel1.Controls.Add(cbl); 
        }
        
        protected void Button1_Click(object sender, EventArgs e)
        {
            string val = "";
            foreach (ListItem li in cbl.Items)
            {
                if (li.Selected)
                {
                    val += li.Value + ",";
                }
            }
            Response.Write(val);
        }
    }
      

  8.   

    改用客户端的控件,设置name一致,提交时会自动拼接以逗号分隔  for (int i = 0; i < 3; i++) {
                    var control = new System.Web.UI.LiteralControl(string.Format("<input type='checkbox' name='checkbox' value='{0}' />", i));
                    test.Controls.Add(control);
                }
                //取值
                Request["checkbox"]
      

  9.   

    你怎知道只会有正好3个动态添加的部分?你怎知道模板中只有一个CheckBox而不会有别的更多内容?你怎知道每一次画蛇添足地为checkBox设置什么Text之类的属性是有意义的(难道Text不会动态改变么?就算不改变你也不用在page_load中设置啊?人家Checkbox毕竟有viewState,用不着你在page_load中去设置属性值。同时还有面向应用的比较实用的开发,你没有找到例子。这一切都说明了,你最好去学学DataList,以及相关的应用程序开发。也许一个学生今天觉得麻烦的,别人(实际开发的人)还觉得异常省事呢。
      

  10.   

    会使用“动态添件控件”,需要你有基本的asp.net控件开发经验,至少能够听得懂控件开发时所需要的那些数据。如果写出来的代码到处都是问题,甚至根本就不知道原理,那么自然会推荐你真正“不麻烦”的写法。很多时候,你自己并不知道什么是“麻烦”。
      

  11.   

    完全看不明白LS喷什么,首先我写的代码只一个测试,什么3个4个说的什么啊,另外我只提供一个思路而已,我有强迫LZ用? 最后我想说我怎么学貌似不用你来教吧...
      

  12.   

    比如说你随便往页面上拖一个Button或者别的什么回发控件,然后看看则个简单的测试下,页面上的所谓动态CheckBox还存在么?如果都不存在了,更别去考虑“那样的程序是怎样获取客户端返回的值”的了。你提出的了一点问题,如果不能想起来通常必须随后配套要解决的问题,那么垃圾“示例”程序就会让你更加麻烦。所以你最好找成熟一些的教程去学习。要知道,这些教程还是比较靠谱的。哪怕你也许一开始认为麻烦一点。
      

  13.   

    非常感谢楼上几位大大的帮助,小弟瓜得很,正在按你们的思路努力探索中,还好CSDN高人多,路也比较多,一条不通再试一条,谢谢拉~~
    保留争议,共同开发.....
      

  14.   

    感觉找到问题所在了,以前我是用PANEL控件来当容器,看了diwu0510 的例子以后,发才原来是自己没搞清楚Control 和Controls对象的意思,没有公共属check当然不能用了。
    对于第一个例子我的理解是:用新生成一个同样ID的对象,来引用控件。
    第二个例子是:利用容器的子控件,来引用.
    不知道我的理解是否正确,再一次感觉楼上几位大大的热心帮助,小弟去加个分来结帖。
      

  15.   

    我只是写写CheckBox cb1 = (CheckBox)Page.FindControl("ckbox1");
             if (cb1.Checked)可以使用 if(cb1.Checked) 。没有延伸问题,因为如果对于初学或者暂时不熟悉某开发语言者,
    有时候只需要解决当下小问题。