chancehui

导航

DataList模板的RadioButtonList控件绑定数据的方法

因为我的毕业论文是关于WEB上的考试系统所以在选择题方面我就想到用DataList控件的模板上加上RadioButtonList控件的方法.

首先我的数据表如下图:
其中examAsk为选择题的问题,examOption为选择题的选项用$符号分隔开,optionAns为选择题正确答案.这样做的难点是要把选择题的选项分离出来并绑定到RadioButtonList上,得到的效果如下图.
 
因为本人的粗心在开始Page_Load绑定数据时没有加上if(!IsPost)所以一直都解决不了RadioButtonList选中项的回传问题,所以搞了我两天.令我在这两天使用了各种方法都试过了,虽说走了好多弯路,不过都学了不同的RadioButtonList的数据绑定方法. 下面是总结的两种可行的方法。
方法一: 直接在前台绑定选择题选项字符的分离方法:
前台代码:

                <TABLE id="Table1" cellSpacing="1" cellPadding="1" width="300" align="center" border="1">
                    
<TBODY>
                        
<TR>
                            
<TD align="center"></TD>
                        
</TR>
                        
<TR>
                            
<TD align="center"></TD>
                        
</TR>
                        
<TR>
                            
<TD align="center"><asp:datalist id="dlOption" runat="server">
                                    
<ItemTemplate>
                                        
<TABLE id="Table2" cellSpacing="1" cellPadding="1" width="300" border="1">
                                            
<TR>
                                                
<TD>
                                                    
<asp:Label id=lbAsk runat="server" Text='<%# DataBinder.Eval(Container.DataItem,"examAsk") %>'>
                                                    
</asp:Label></TD>
                                            
</TR>
                                            
<TR>
                                                
<TD>
                                                    
<asp:RadioButtonList id=rblOption runat="server" DataSource='<%# rdlDataBind(DataBinder.Eval(Container.DataItem,"examOption").ToString()) %>'>
                                                    
</asp:RadioButtonList></TD>
                                            
</TR>
                                        
</TABLE>
                                    
</ItemTemplate>
                                
</asp:datalist></TD>
                        
</TR>
                    
</TBODY>
                
</TABLE>

后台方法:

        public string[] rdlDataBind(string data)
        
{

            
string[] strOpt;
            strOpt
=data.Split('$');
                
return strOpt;
        }

这种方法较好,不过就是当要取得RadioButtonList选中项的value值就不可以返回A、B、C、D的值。还不知道怎么添加value值。
方法二:
就是直接在DataList的ItemDataBound直接绑定
这种方法就不用在前台进行绑定了,后台绑定方法代码如下:

        public DataTable radblBind(string data)
        
{
            DataTable dt
=new DataTable();
            DataRow dr;
            dt.Columns.Add(
new DataColumn("strLet",typeof(string)));
            dt.Columns.Add(
new DataColumn("strOpt",typeof(string)));
            
string letter="A,B,C,D,E,F,G,H";
            
string[] strLet=letter.Split(',');
            
string[] strOpt=data.Split('$');

            
for(int i=0;i<strOpt.Length;i++)
            
{
                   dr
=dt.NewRow();
                dr[
0]=strLet[i];
                dr[
1]=strOpt[i];
                dt.Rows.Add(dr);
            }

            
         
return dt;
        }

 

        private void dlOption_ItemDataBound(object sender, System.Web.UI.WebControls.DataListItemEventArgs e)
        
{
            
if(e.Item.ItemType==ListItemType.Item||e.Item.ItemType==ListItemType.AlternatingItem||e.Item.ItemType==ListItemType.EditItem)
            
{
                RadioButtonList rbt
=(RadioButtonList)e.Item.FindControl("rblOption");
                
string data=Convert.ToString(DataBinder.Eval(e.Item.DataItem,"examOption"));
                DataTable dtOpt
=this.radblBind(data);
                
for(int i=0;i<dtOpt.Rows.Count;i++)
                
{
        
//直接用ListItem绑定            ListItem it=new ListItem(dtOpt.Rows[i]["strOpt"].ToString(),dtOpt.Rows[i]["strLet"].ToString());
                    rbt.Items.Add(it);
                }

//    用DataBind绑定RadioButtonList            rbt.DataSource=new DataView(dtOpt);
//                rbt.DataTextField="strOpt";
//                rbt.DataValueField="strLet";
//                rbt.DataBind();
            }

        }

上面这种方法就可以直接设置给RadioButtonList的value的返回值。
上面就是我试过的两种行得通的方法,其它的方法我也试过,不过都有这有那的错误就不介绍了。
若是各位有什么其它更好的方法请各位博客们多多赐教。因为这是本人第一次,所以要是有什么错误的地请各位大虾不要笑话。

posted on 2006-01-02 20:31  辉辉  阅读(5024)  评论(10编辑  收藏  举报