Repeater 中添加子控件.

最近正在做一个考试系统. 要求实现以下效果.

 

考题是从后台数据库中取的数据,测试答案也是从后台取的数据, 还要根据复选单选 来添加复选框和单选框.

 

最开始的思路是,Repeater中套一个Repeater,在Repeater的Item_DataBind 中绑定数据,但是这样的话,数据是可以正常绑定,但是复选单选框实在不好处理...

 

最后考虑从后台添加控件...

1.首先,添加考题数据,绑定考题数据.

 protected void Page_Load(object sender, EventArgs e)
    {

      RepeaterItem.DataSourceID=getItemData();//getItemData 是一个获取数据源的方法,返回一个数据源。

      RepeaterItem.DataBind();
    }

2.添加考题的答案选项

  protected void RptExamItem_ItemDataBound(object sender, RepeaterItemEventArgs e)
    {

       string examItemID,optionSign; //两个变量,是存取本考题的考题ID,和单选或复选的标记
        if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
        {
           examItemID = ((HiddenField)e.Item.FindControl("EItemID")).Value;
           optionSign =((HiddenField)e.Item.FindControl("OptionSign")).Value;

           DataSet ds = getAnswerItem(examItemID);  //getAnswerItem()返回一个考题的答案选项的数据源


           PlaceHolder phl =(PlaceHolder) e.Item.FindControl("ControlContainer");

           HtmlGenericControl span = new HtmlGenericControl("span");
           span.ID = "sphd";
           string listr = "";
          
            for(int i =0; i < ds.Tables[0].Rows.Count; i ++)
            {
              
                HtmlContainerControl li = new HtmlGenericControl("li");
                li.ID = "lihd" + i;
                listr = ds.Tables[0].Rows[i]["NumberSignDesc"].ToString() + ds.Tables[0].Rows[i]["ExamItemAsTitle"].ToString();
                li.InnerHtml = listr;
                span.Controls.Add(li);
                if (optionSign == "False")
                {
                    HtmlInputRadioButton rd = new HtmlInputRadioButton();
                    rd.ID = "rdanswer"+i;
                    rd.Name = "ckanswer" + examItemID;
                    rd.Value = ds.Tables[0].Rows[i]["NumberSign"].ToString();
                    rd.Attributes.Add("onclick", "OnTimeBegin()");
                    span.Controls.Add(rd);
                       
                }
                else
                {
                    HtmlInputCheckBox ck = new HtmlInputCheckBox();
                    ck.ID = "ckanswer"+i;
                    ck.Name = "ckanswer" + examItemID;
                    ck.Value = ds.Tables[0].Rows[i]["NumberSign"].ToString();
                    ck.Attributes.Add("onclick", "OnTimeBegin()");
                    span.Controls.Add(ck);
                
                }
                phl.Controls.Add(span);
           
            }
    }

 

因为我要用RADIO 和checkbox 的值。这是取值的代码.

 

 HtmlGenericControl span = (HtmlGenericControl)this.RptExamItem.Items[i].FindControl("sphd");
         
            for (int j = 0; j < span.Controls.Count; j++)
            {
                if (span.FindControl("rdanswer" + j) !=null)
                {
                    HtmlInputRadioButton rd = (HtmlInputRadioButton)span.FindControl("rdanswer" + j);
                    if (rd.Checked)
                    {
                        checkanswer = checkanswer + rd.Value + "|";
                    }
                }
                if (span.FindControl("ckanswer" + j)!=null)
                {
                    HtmlInputCheckBox ck = (HtmlInputCheckBox)span.FindControl("ckanswer" + j);
                    if (ck.Checked)
                    {
                        checkanswer = checkanswer + ck.Value + "|";
                    }
                }

 

 前台页面代码:

 <asp:Repeater ID="RptExamItem" runat="server"
            onitemdatabound="RptExamItem_ItemDataBound"  >
         <HeaderTemplate>

         </HeaderTemplate>
        <ItemTemplate>
            <asp:HiddenField runat="server" ID="EItemID"  value='<%#Eval("ExamItemID") %>'/>
            <asp:HiddenField runat="server" ID="OptionSign" Value='<%#Eval("OptionSign") %>' />
      
            <ul class="item">
            <li class="first" id="one" value='<%#Eval("ExamItemID") %>'><%#Eval("EItemContent")%>(<%#Eval("POINT")%> 分)</li>
                       
           <asp:PlaceHolder ID="ControlContainer"  runat="server"/>

            </ul>
        </ItemTemplate>
        <FooterTemplate>
        <br />
      
        </FooterTemplate>

    </asp:Repeater>
 

本来 placeHolder 那里放的是一个嵌套的Repeater的,呵呵,这种嵌套的数据,第一反应就是嵌套数据控件,,但是纠结了半天也搞不定checkbox 和redio 控件的问题,也取不出值来..所以就用这种办法了.... 纠结..

 

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值