原文:
List控件(如 CheckBoxList、DropDownList、ListBox 和 RadioButtonList 类)继承自ListControl类,不能直接创建 ListControl 抽象类的实例。相反,此类由其他类(如 CheckBoxList、DropDownList、ListBox 和 RadioButtonList 类)继承以提供通用的基本功能。 ListControl 类的属性允许您指定用来填充列表控件的数据源。使用 DataSource 属性指定要绑定到列表控件的数据源。如果数据源包含多个表,请使用 DataMember 属性指定要使用的表。通过分别设置 DataTextField 和 DataValueField 属性,可以将数据源中的不同字段绑定到列表控件项的 ListItem.Text 和 ListItem.Value 属性。通过设置 DataTextFormatString 属性,可以设定列表控件中每一项的显示文本的格式。 列表控件中显示的所有项都保存在 Items 集合中。可以使用 SelectedIndex 属性,以编程方式指定或确定列表控件中选定项的索引。使用 SelectedItem 属性,可以访问选定项的属性。 ListControl 类提供了 SelectedIndexChanged 事件,在信息发往服务器之间,如果列表控件中的选定项发生变化,会引发该事件。这使您可以为此事件提供自定义处理程序。有关处理事件的更多信息,请参见使用事件。
继承自ListControl的列表控件包括了以下几个: BulletedList -- 显示列表项,列表项可以为文本、链接按钮或者是超链接 checkboxlist -- 显示复选框列表 dropdownlist -- 显示下拉框列表 Listbox -- 显示列表框 RadioButtonlist-- 显示单选按钮列表
1.共通属性和方法
以为以上几个控件都继承于ListControl,所以它们有一些共通的东西 1.1 每个控件都有一个选项列表,每个选项都是由ListItem类的一个实例。 其中ListItem类具有以下通用属性 ● Attributes:可以在列表项中添加HTML属性 ● Enable:可以将列表项置为可用 ● Selected:可以将列表项标记为选中 ● Text:显示的文本 ●Value:对应的隐藏值 1.2 都可以绑定要数据源,支持声明式绑定和编程式绑定,声明式比较简单,不多述。 编程式绑定不光可以绑定ListItem对象集合外,还可以绑定DataTable中的Columns,可以绑定List<Type>对象。如: 例1:List控件绑定List<Type>对象
<script runat="server"> public class CartItem { private int _id; public string _description; public int Id { get { return _id; } } public string Description { get { return _description; } } public CartItem(int id, string description) { _id = id; _description = description; } } void Page_Load() { if (! IsPostBack) { // Create shopping cart List<CartItem> shoppingCart = new List<CartItem> (); shoppingCart.Add(new CartItem(1 , “Notebook Computer”)); shoppingCart.Add(new CartItem(2 , “HD Plasma Television”)); shoppingCart.Add(new CartItem(3 , “Lava Lamp”)); lstShoppingCart.DataSource = shoppingCart; lstShoppingCart.DataBind(); } } </script> <asp:ListBox id=”lstShoppingCart” DataTextField =”Description” DataValueField=”Id” Runat=”server” />
例2:List控件绑定数据源控件 <asp:DropDownList id=”ddlMovies” DataSourceID=”srcMovies” DataTextField =”Title” DataValueField=”Id” Runat=”server” /> <asp:SqlDataSource id=”srcMovies” SelectCommand=”SELECT Id, Title FROM Movies” ConnectionString=”<%$ ConnectionStrings:Movies %> ” Runat=”server” />
1.3 以相同的方式确定被选中的项 通过SelectedIndex、SelectedItem、SelectedValue属性获取和设置被选中的项。 1.4 追加数据项:AppendDataBOundItems属性 默认的,当使用DataBind绑定到数据源时,List控件原有的数据会被清空,新的选项会被加入进来,而如果通过设定AppendDataBoundItems为true属性,就可以在绑定数据源时,保留已经存在的数据项。 1.5 启用自动回传功能: AutoPostBack属性 当设置ListControl的AutoPostBack属性为true时,对List控件中的列表项进行更改,都会导致List控件的表单自动回传到服务器。 1.6 获得列表项(ListItem)的集合: Items属性 所有List控件呈现的列表项都包含在ListControl控件的Items属性中。该属性返回的是一个ListItemCollection对象。 可以直接访问这个集合中的列表项,增加或删除指定列表项或者改变列表项的顺序。 例3:访问和修改列表项 <script runat="server"> protected void btnAdd_Click(object sender, EventArgs e) { ListItem item = lstAllMovies.SelectedItem; if (item != null ) { lstAllMovies.Items.Remove(item); lstFavoriteMovies.ClearSelection(); // 清除列表选择并将所有项的 Selected 属性设置为 false。 lstFavoriteMovies.Items.Add(item); } } </script> <asp:ListBox id=”lstAllMovies” DataSourceID=”srcMovies” DataTextField =”Title” DataValueField=”Id” Runat=”server” /> <asp:Button id=”btnAdd” Text=”—>” ToolTip=”Add List Item” Runat=”server” OnClick=”btnAdd_Click” /> <asp:ListBox id=”lstFavoriteMovies” Runat=”server” /> <asp:SqlDataSource id=”srcMovies” SelectCommand=”SELECT Id, Title FROM Movies” ConnectionString=”<%$ ConnectionStrings:Movies %>” Runat=”server” />
2. DropdownList控件
默认的DropdownList控件不大好用,推荐使用第三方DropdownList控件,例如EasyListBox。见 3. RadioButtonList控件
RadioButtonList控件有3个属性可以影响其布局,分别是: ● RepeatColumns: 按钮需要显示的列数 ● RepeatDirection: 排列方向,可以赋为Horizontal(横向)及Vertical(纵向) ● RepeatLayout: 单选按钮是否显示在一个HTML表格中,可以赋值为Table或Flow. 默认为Table 4. ListBox控件
与DropdownList控件相似,不同的是,可以多选。另外注意的是ListBox的Rows属性,可以得知一次显示选择项的行数 ● Rows: 获取或设置 ListBox 控件中显示的行数。默认为4 可以使用 Items 集合检查 ListBox 控件中包含的 ListItem 对象。例如,可以通过枚举 Items 集合并测试每个 ListItem 元素的 Selected 值来确定 ListBox 控件中的选定项。 例4:获得ListBox中选择项 < script runat =”server” > protected void btnSubmit_Click(object sender, EventArgs e){ foreach (ListItem item in lstMovies.Items) if (item.Selected) lblMovie.Text += “ < li > ” + item.Text;} </ script > < asp:ListBox id =”lstMovies” DataSourceID =”srcMovies” DataTextField =”Title” DataValueField =”Id” SelectionMode =”Multiple” Runat =”server” /> < asp:Button id =”btnSubmit” Text =”Submit” OnClick =”btnSubmit_Click” Runat =”server” /> < asp:SqlDataSource id =”srcMovies” SelectCommand =”SELECT Id, Title FROM Movies” ConnectionString =”<%$ ConnectionStrings:Movies % > ” Runat=”server” /> 5. CheckboxList控件
呈现一组复选框列表,可以多选,程序中获得选择项的方式同例4的代码相同。也是通过枚举来实现。 其有3个属性可以影响其布局,分别是RepeatColumns、RepeatDirection、RepeatLayout,用法与RadioButtonList相同。 6. BulletedList控件
可以呈现无序(项目符号)的列表,也可以呈现有序(带编号)的列表,每个列表项可以为文本、LinkButton或者是一个到其它WEB页的链接。 通过BulledStyle属性可以控制每一个列表项的外观。属性可以有以下值:Circle,CustomImage,Disc,LowerAplha… 例5:为列表项添加自定义图像: < asp:BulletedList id =”blMovies” DataSourceID =”srcMovies” DataTextField =”Title” BulletStyle =”CustomImage” BulletImageUrl =”~/Images/Bullet.gif” Runat =”server” /> < asp:SqlDataSource id =”srcMovies” SelectCommand =”SELECT Id, Title FROM Movies” ConnectionString =”<%$ ConnectionStrings:Movies % > ” Runat=”server” /> 可以通过DisplayMode属性修改每个列表项的外观,属性接受以下值: ● HyperLink: 呈现为一个到其它页面的链接 ● LinkButton: 呈现一个LinkButton控件。 ● Text: 呈现一个简单文本 例6:为列表项呈现链接
< asp:BulletedList id =”blWebsites” DisplayMode =”HyperLink” Target =”_blank” Runat =”server” > < asp:ListItem Text =”Yahoo” Value =”http://www.Yahoo.com” /> < asp:ListItem Text =”Google” Value =”http://www.Google.com” /> < asp:ListItem Text =”Deja” Value =”http://www.Deja.com” /> </ asp:BulletedList > 注:BulletedList与其它List控件不同,它不支持属性SelectedIndex、SelectedItem、SelectedValue。因为它压根儿无法选择。