被人遗忘的控件(一)

博客主要介绍了单选和多选控件的相关代码实现。根据Qtype值判断是单选题还是多选题,分别添加RadioButtonList和CheckBoxList控件,设置其布局、样式等属性,还进行了数据绑定,对于单选题还添加了校验控件。
.net自己已经提供了许多非常强大的服务器控件,方便我们在开发时使用。有许多控件我们简直是天天和它们打交道,也有些控件被我们遗忘了(尽管它们那么的好用)。

准备开始讲解了,希望各位一起讨论。emsmilep.gif

我们知道web窗体中有类控件叫PlaceHolder,它好像一个空白的容器,具体展现在客户端的浏览器中是看不到它的。可能正因为如此,我们很少注意到它的存在,也很少使用这个控件。实际上它是非常好用的,我们举例来说明。

关于网站调查的功能实现,相信对大家都是很简单的,单选多选。下面的代码就是其中的一种实现(为了方便浏览,仅显示其中关键的一段)。
None.gif                                                <ItemTemplate>
None.gif                                                    
<%# Qtype==0 ?"<input type='radio'":"<input type='checkbox'" %>
None.gif                                                    
<%" name='question_"+ Qindex +"'" %>
None.gif                                                    
<%" value='"+ DataBinder.Eval(Container.DataItem, "fdoptionid"+"'" %>
None.gif                                                    
<%#" max='"+ QmaxSelect +"'>" %>
None.gif                                                    
<a href='<%= scripturl %><%# DataBinder.Eval(Container.DataItem, "fdphotoid") %>' class='link-yellow' target=_blank>
None.gif                                                        
<%# DataBinder.Eval(Container.DataItem, "fdtitle"%>
None.gif                                                    
</a>
None.gif                                                
</ItemTemplate>

对于加粗这行的小技巧,应该很多人都明白,也这么使用过,用来实现单选或者多选。或许还有很多人都在使用这种从asp开发中直接应用过来的小技巧。如果调查的类型更丰富,出现了问答题的时候,这样做还行吗?在.net中有没有更好的实现方式呢?

答案是肯定的,使用PlaceHolder控件之后,我们可以更轻松地实现,程序也更容易阅读。下面是aspx的代码以及cs代码(部分)。
None.gif                                                                                    <asp:repeater id="Repeater1" runat="server">
None.gif                                                                                        
<ItemTemplate>
None.gif                                                                                            
<table width="100%" border="0" cellpadding="2" cellspacing="0" class="content">
None.gif                                                                                                
<tr>
None.gif                                                                                                    
<td><strong><%# Container.ItemIndex+1 %>.<%# DataBinder.Eval(Container.DataItem, "title"%></strong>
None.gif                                                                                                        
<asp:Label id="QType" runat="server" Visible="False" Text='<%# DataBinder.Eval(Container.DataItem, "qtype") %>'>
None.gif                                                                                                        
</asp:Label>
None.gif                                                                                                        
<asp:Label id="QClass" runat="server" Visible="False" Text='<%# DataBinder.Eval(Container.DataItem, "qclass") %>'>
None.gif                                                                                                        
</asp:Label>
None.gif                                                                                                    
</td>
None.gif                                                                                                
</tr>
None.gif                                                                                                
<tr>
None.gif                                                                                                    
<td>
None.gif                                                                                                        
<asp:PlaceHolder id="PlaceHolder1" runat="server"></asp:PlaceHolder></td>
None.gif                                                                                                
</tr>
None.gif                                                                                            
</table>
None.gif                                                                                            
<br>
None.gif                                                                                        
</ItemTemplate>
None.gif                                                                                    
</asp:repeater>

None.gif                    if(Qtype==0//如果是单选题
ExpandedBlockStart.gifContractedBlock.gif
                    dot.gif{
InBlock.gif                        
//----------------添加RadioButtonList控件-------------------
InBlock.gif
                        RadioButtonList radiolist = new RadioButtonList();
InBlock.gif                        radiolist.ID 
= "Question";
InBlock.gif                        radiolist.RepeatLayout 
= RepeatLayout.Table;
InBlock.gif                        radiolist.CellPadding 
= 0;
InBlock.gif                        radiolist.CellSpacing 
= 0;
InBlock.gif                        radiolist.CssClass 
= "content";
InBlock.gif                        
if(maxlen>=20)
ExpandedSubBlockStart.gifContractedSubBlock.gif                        
dot.gif{
InBlock.gif                            radiolist.RepeatDirection 
= RepeatDirection.Vertical;
ExpandedSubBlockEnd.gif                        }

InBlock.gif                        
else
ExpandedSubBlockStart.gifContractedSubBlock.gif                        
dot.gif{
InBlock.gif                            radiolist.RepeatDirection 
= RepeatDirection.Horizontal;
InBlock.gif                            
if(maxlen>=15) radiolist.RepeatColumns = 3;
InBlock.gif                            
else if(maxlen>=10) radiolist.RepeatColumns = 4;
InBlock.gif                            
else if(maxlen>=6) radiolist.RepeatColumns = 5;
InBlock.gif                            
else radiolist.RepeatColumns = 6;
InBlock.gif                            
if(objItem.propRowCount> radiolist.RepeatColumns)
ExpandedSubBlockStart.gifContractedSubBlock.gif                            
dot.gif{
InBlock.gif                                radiolist.Width 
= new Unit(100, UnitType.Percentage);
ExpandedSubBlockEnd.gif                            }

ExpandedSubBlockEnd.gif                        }

InBlock.gif                        
//----------------绑定数据-------------------
InBlock.gif
                        for(int j=0;j<objItem.propRowCount;j++)
ExpandedSubBlockStart.gifContractedSubBlock.gif                        
dot.gif{
InBlock.gif                            ListItem myItem 
= new ListItem();
InBlock.gif                            myItem.Text 
= objItem.propDset.Tables[0].Rows[j]["title"].ToString() + "&nbsp;&nbsp;&nbsp;&nbsp;";
InBlock.gif                            myItem.Value 
= objItem.propDset.Tables[0].Rows[j]["score"].ToString();
InBlock.gif                            radiolist.Items.Add(myItem);
ExpandedSubBlockEnd.gif                        }

InBlock.gif                        placeh.Controls.Add(radiolist);
InBlock.gif                        
//----------------添加校验控件-------------------
InBlock.gif
                        RequiredFieldValidator rfv = new RequiredFieldValidator();
InBlock.gif                        rfv.ID 
= "RequiredFieldValidator1";
InBlock.gif                        rfv.ControlToValidate 
= radiolist.ID;
InBlock.gif                        rfv.ErrorMessage 
= "请选择你第"+(i+1)+"题的答案";
InBlock.gif                        rfv.Display 
= ValidatorDisplay.Dynamic;
InBlock.gif                        placeh.Controls.Add(rfv);
ExpandedBlockEnd.gif                    }

None.gif                    
else if(Qtype==1//如果是多选题
ExpandedBlockStart.gifContractedBlock.gif
                    dot.gif{
InBlock.gif                        
//----------------添加CheckBoxList控件-------------------
InBlock.gif
                        CheckBoxList checklist = new CheckBoxList();
InBlock.gif                        checklist.ID 
= "Question";
InBlock.gif                        checklist.RepeatLayout 
= RepeatLayout.Table;
InBlock.gif                        checklist.CellPadding 
= 0;
InBlock.gif                        checklist.CellSpacing 
= 0;
InBlock.gif                        checklist.CssClass 
= "content";
InBlock.gif                        
if(maxlen>=20)
ExpandedSubBlockStart.gifContractedSubBlock.gif                        
dot.gif{
InBlock.gif                            checklist.RepeatDirection 
= RepeatDirection.Vertical;
ExpandedSubBlockEnd.gif                        }

InBlock.gif                        
else
ExpandedSubBlockStart.gifContractedSubBlock.gif                        
dot.gif{
InBlock.gif                            checklist.RepeatDirection 
= RepeatDirection.Horizontal;
InBlock.gif                            
if(maxlen>=15) checklist.RepeatColumns = 3;
InBlock.gif                            
else if(maxlen>=10) checklist.RepeatColumns = 4;
InBlock.gif                            
else if(maxlen>=6) checklist.RepeatColumns = 5;
InBlock.gif                            
else checklist.RepeatColumns = 6;
InBlock.gif                            
if(objItem.propRowCount> checklist.RepeatColumns)
ExpandedSubBlockStart.gifContractedSubBlock.gif                            
dot.gif{
InBlock.gif                                checklist.Width 
= new Unit(100, UnitType.Percentage);
ExpandedSubBlockEnd.gif                            }

ExpandedSubBlockEnd.gif                        }

InBlock.gif                        
//----------------绑定数据-------------------
InBlock.gif
                        for(int j=0;j<objItem.propRowCount;j++)
ExpandedSubBlockStart.gifContractedSubBlock.gif                        
dot.gif{
InBlock.gif                            ListItem myItem 
= new ListItem();
InBlock.gif                            myItem.Text 
= objItem.propDset.Tables[0].Rows[j]["title"].ToString() + "&nbsp;&nbsp;&nbsp;&nbsp;";
InBlock.gif                            myItem.Value 
= objItem.propDset.Tables[0].Rows[j]["score"].ToString();
InBlock.gif                            checklist.Items.Add(myItem);
ExpandedSubBlockEnd.gif                        }

InBlock.gif                        placeh.Controls.Add(checklist);
ExpandedBlockEnd.gif                    }

可以看出,使用PlaceHolder之后,我们可以在后置代码中方便地实现各种效果,即使是问答题我们也可以通过向PlaceHolder添加子控件来实现。

以上仅仅是举例说明了这个控件的一个具体应用,如何更好的使用这些控件来欢迎大家多多探讨。

转载于:https://www.cnblogs.com/jimmyhsu/archive/2005/02/28/110171.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值