Repeater中嵌套RadioButton和CheckBoxList

昨天做个项目,其中有个页面,Repeater中要嵌套RadioButton和CheckBoxList,参照别人的方法,但就是取不到RadioButtonList的SelectedValue,弄了一个晚上才发现,绑定数据的时候没有放在!IsPostBack中,郁闷。代码如下
aspx
----------------------------------------------------

 1<asp:repeater id="Rt_One" Runat="server">
 2                                    <ItemTemplate>
 3                                        <tr>
 4                                            <td valign="top">
 5                                                <asp:TextBox ID="txtquest" Runat="server" Text='<%# DataBinder.Eval( Container.DataItem ,"[questionid]") %>' Width="0">
 6                                                </asp:TextBox>
 7                                                <asp:Label ID="lblQuest" Runat="server">
 8                                                    <%# DataBinder.Eval( Container.DataItem ,"[Num]"%>
 9                                                </asp:Label>
10                                                :<%# DataBinder.Eval( Container.DataItem ,"[strquestiontitle]"%>&nbsp;&nbsp;[<%# DataBinder.Eval( Container.DataItem ,"[store]"%>分]</td>
11                                        </tr>
12                                        <tr>
13                                            <td>
14                                                <asp:RadioButtonList ID="rbAnswer" Runat="server"></asp:RadioButtonList></td>
15                                        </tr>
16                                    </ItemTemplate>
17                                </asp:repeater>
 1<asp:repeater id="Rt_More" Runat="server">
 2                                    <ItemTemplate>
 3                                        <tr>
 4                                            <td valign="top">
 5                                                <asp:TextBox ID="txtQuest2" Runat="server" Text='<%# DataBinder.Eval( Container.DataItem ,"[questionid]") %>' Width="0">
 6                                                </asp:TextBox>
 7                                                <asp:Label ID="lblQuest2" Runat="server">
 8                                                    <%# DataBinder.Eval( Container.DataItem ,"[Num1]"%>
 9                                                </asp:Label><%# DataBinder.Eval( Container.DataItem ,"[strquestiontitle]"%>&nbsp;&nbsp;[<%# DataBinder.Eval( Container.DataItem ,"[store]"%>分]</td>
10                                        </tr>
11                                        <tr>
12                                            <td colspan="2">
13                                                <asp:CheckBoxList ID="chkAnswer" Runat="server"></asp:CheckBoxList></td>
14                                        </tr>
15                                    </ItemTemplate>
16                                </asp:repeater>

cs
1private void Page_Load(object sender, System.EventArgs e)
2        {
3            // 在此处放置用户代码以初始化页面
4            if(!IsPostBack)
5            {
6                RtRt_OneBind();
7                Rt_MoreBind();
8            }

9        }
 1private void RtRt_OneBind()
 2        {
 3            SqlConnection conn=new SqlConnection(strconn);
 4            SqlCommand cmd=new SqlCommand();
 5            cmd.Connection=conn;
 6            conn.Open();
 7            cmd.CommandType=CommandType.StoredProcedure;
 8            cmd.CommandText="s_TestPageQuestion_GetByPage";
 9            cmd.Parameters.Add("@id",SqlDbType.Int).Value=System.Convert.ToInt32(Request.QueryString["id"]);
10            cmd.Parameters.Add("@type",SqlDbType.Int).Value=0;
11            ds=new DataSet();
12            da=new SqlDataAdapter(cmd);
13            da.Fill(ds,"s_TestPageQuestion_GetByPage");
14            Rt_One.DataSource=ds.Tables["s_TestPageQuestion_GetByPage"].DefaultView;
15            Rt_One.DataBind();
16        }
 1private void Rt_MoreBind()
 2        {
 3            SqlConnection conn=new SqlConnection(strconn);
 4            SqlCommand cmd=new SqlCommand();
 5            cmd.Connection=conn;
 6            conn.Open();
 7            cmd.CommandType=CommandType.StoredProcedure;
 8            cmd.CommandText="s_TestPageQuestion_GetByPage";
 9            cmd.Parameters.Add("@id",SqlDbType.Int).Value=System.Convert.ToInt32(Request.QueryString["id"]);
10            cmd.Parameters.Add("@type",SqlDbType.Int).Value=0;
11            ds=new DataSet();
12            da=new SqlDataAdapter(cmd);
13            da.Fill(ds,"s_TestPageQuestion_GetByPage");
14            Rt_More.DataSource=ds.Tables["s_TestPageQuestion_GetByPage"].DefaultView;
15            Rt_More.DataBind();
16        }
 1override protected void OnInit(EventArgs e)
 2        {
 3            //
 4            // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
 5            //
 6            InitializeComponent();
 7            Rt_One.ItemDataBound +=new RepeaterItemEventHandler(Rt_One_ItemDataBound);
 8            Rt_More.ItemDataBound +=new RepeaterItemEventHandler(Rt_More_ItemDataBound);
 9            base.OnInit(e);
10        }

 1private void Rt_One_ItemDataBound(object sender, RepeaterItemEventArgs e)
 2        {
 3            if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
 4            {
 5                RadioButtonList rbl = (RadioButtonList) e.Item.FindControl("rbAnswer");
 6                DataRowView row = (DataRowView) e.Item.DataItem;
 7                string questionid = row["questionid"].ToString() ;
 8                DataSet ands1 = new DataSet( );
 9                string sql = "S_Answer_Select";
10                SqlConnection conn=new SqlConnection(strconn);
11                SqlCommand ancmd = new SqlCommand( sql,conn);
12                ancmd.CommandType = CommandType.StoredProcedure;
13                ancmd.Parameters.Add("@questionid", SqlDbType.Int, 4).Value = questionid;
14                SqlDataAdapter anda = new SqlDataAdapter( ancmd);
15                anda.Fill(ands1);
16                if(ands1!=null && ands1.Tables [0].Rows .Count >0)
17                {
18                    rbl.DataSource = ands1;
19                    rbl.DataTextField = "result";
20                    rbl.DataValueField = "id";
21                    rbl.DataBind(); 
22    
23                }

24                
25            }
        
26        }
 1private void Rt_More_ItemDataBound(object sender, RepeaterItemEventArgs e)
 2        {
 3            CheckBoxList chk = (CheckBoxList) e.Item.FindControl("chkAnswer");
 4            DataRowView row = (DataRowView) e.Item.DataItem;
 5            string questionid = row["questionid"].ToString() ;
 6            DataSet ands = new DataSet( );
 7            string sql = "S_Answer_Select";
 8            SqlConnection conn=new SqlConnection(strconn);
 9            SqlCommand ancmd = new SqlCommand( sql,conn);
10            ancmd.CommandType = CommandType.StoredProcedure;
11            ancmd.Parameters.Add("@questionid", SqlDbType.Int, 4).Value = questionid;
12            SqlDataAdapter anda = new SqlDataAdapter( ancmd);
13            anda.Fill(ands);
14            if(ands!=null && ands.Tables [0].Rows .Count >0)
15            {
16                chk.DataSource = ands;
17                chk.DataTextField = "result";
18                chk.DataValueField = "id";
19                chk.DataBind(); 
20            }

21        }

 1private void Button1_Click(object sender, System.EventArgs e)
 2        {
 3            
 4            SqlConnection conn=new SqlConnection(strconn);
 5            SqlCommand cmd=new SqlCommand();
 6            cmd.Connection=conn;
 7            conn.Open();
 8            sgring msg="";
 9            
10            for(int i=0;i<Rt_One .Items .Count;i++)
11            {
12                TextBox questid = (TextBox) Rt_One.Items[i].FindControl("txtquest");
13                RadioButtonList rbl = (RadioButtonList) Rt_One.Items[i].FindControl("rbAnswer");
14                
15                if(rbl!=null && rbl.SelectedValue !="")
16                {
17                    int questionid = Convert.ToInt32(questid.Text );
18                    msg += rbl.SelectedValue.ToString ()+"|";
19                    
20                }

21            }

22            
23            for(int m=0;m<Rt_More .Items .Count ;m++)
24            {
25                string msg = "";
26                CheckBoxList mybox=(CheckBoxList)Rt_More.Items[m].FindControl("chkAnswer");
27                TextBox questid2 = (TextBox) Rt_More.Items[m].FindControl("txtQuest2");
28                int questid2v = Convert.ToInt32(questid2.Text );
29                SqlCommand chkcmd = new SqlCommand( "s_Answer_GetRight",conn);
30                
31                    if(mybox!=null)
32                    {
33                        for(int n=0;n<mybox.Items .Count;n++)
34                        {
35                            if(mybox.Items [n].Selected )
36                            {
37                                msg += mybox.Items[n].Value +"|";
38                            }

39                        }

40                    }

41            }

42
43
44        }

绑定的代码不是我写的,有点乱。
posted @ 2007-06-08 11:14  拖拉机大叔  阅读(3365)  评论(6编辑  收藏  举报