清华电脑学堂:ASP.NET 4.5网站开发与应用实践教程
上QQ阅读APP看书,第一时间看更新

3.5 列表控件

除了选择控件以外,还有一些列表控件同样可以提供选项的选择。不同的是,列表控件在选项的控制上更为灵活;而且无论选项数量有多大,其在页面中所占有的空间是固定的。本节详细介绍ASP.NET中的列表控件。

3.5.1 DropDownList控件

DropDownList控件又称作下拉框控件,能够让用户在下拉列表中进行选择,该控件在工具箱中的符号为

开发人员也可以把DropDownList控件看作容器,这些列表项都属于ListItem类型,每一个ListItem对象都是带有单独属性(如Text属性、Selected属性和Value属性)的对象。DropDownList控件只能选择一个选项。

DropDownList控件在网页中,较为常用的是对地区的选择,即提供【省份】下拉框和【市区】下拉框,在选择省份之后,【市区】下拉框将获取该省所管辖的市区,供用户选择。

开发人员可以通过DropDownList控件的Width和Height来控制其外观,部分浏览器不支持以像素为单位设置的高度和宽度时,这些浏览器将使用行计数设置。除了Width和Height外,表3-7列举了其他的常用属性。

表3-7 DropDownList控件的常用属性

除了属性外,DropDownList控件经常使用SelectedIndexChanged事件,当用户修改当前项时将会引发该事件。

3.5.2 BulletedList控件

BulletedList控件所显示的是一个列表,如新闻页面中列举的前10条新闻标题,BulletedList控件在列举新闻标题的同时,还可以为每一条标题提供一个链接,通往该新闻的详细信息页面。

BulletedList控件在工具箱中的符号为,可以在页面中创建一个无序或有序(编号的)的项列表。BulletedList控件所呈现的样式相当于HTML中的ul或ol元素。通过BulletedList控件可以实现以下效果。

(1)可以指定项、项目符号或编号的外观。

(2)静态定义列表项或通过将控件绑定到数据来定义列表项。

(3)也可以在用户单击项时做出响应。

通过创建静态项或将控件绑定到数据源,可以定义BulletedList控件的列表项。而且通过该控件的相关属性可以设置其外观效果,如表3-8所示为BulletedList控件的常用属性,并对这些属性进行了说明。

表3-8 BulletedList控件的常用属性

BulletedList控件可以通过BulletStyle属性自定义列表项外观,如果将控件设置为呈现项目符号,则可以选择与HTML标准项目符号样式匹配的预定义项目符号样式字段。BulletStyle属性的可取值有10个,同一个值不同的浏览器所呈现项目符号的方式会不同,甚至有些浏览器不支持特定的项目符号样式(如Disc字段)。BulletStyle属性的值如表3-9所示。

表3-9 BulletStyle属性可取值及其说明

通过BulletedList控件添加集合项时有多种方法,例如,设计窗体添加BulletedList控件,该控件右端有箭头按钮,单击按钮有两条可选的链接,一个是【选择数据源】,一个是【编辑项】。选择【编辑项】,可打开【ListItem集合编辑器】,如图3-5所示。

图3-5 集合编辑器

在如图3-5所示的对话框中单击【添加】按钮,可添加新的集合项并打开对应集合项的属性列表,如图3-6所示。

图3-6 集合项属性

在属性列表中分别设置Text属性和Value属性。Text属性定义控件在页上显示的内容;Value属性定义第二个值,该值不会显示,但用户在选择某个项时能返回该值。

所有项添加完成后单击图3-6中的【确定】按钮进行添加,添加完成后,页面上将有如下新增代码。

        <asp:BulletedList ID="BulletedList1" runat="server" BulletStyle=
        "Circle">
            <asp:ListItem>新建项1</asp:ListItem>
            <asp:ListItem>新建项2</asp:ListItem>
            <%--省略其他相关ListItem代码--%>
        </asp:BulletedList>

BulletedList控件的Items属性返回所有集合项的列表对象,该对象包含多个方法,通过这些方法可以添加指定的项、删除项或查找项等,它们的具体说明如表3-10所示。

表3-10 集合列表项的常用方法

集合列表项除了上面列举的方法外,还有一个最常用的属性Count,该属性获取集合中ListItem的对象总数。例如,开发人员分别通过Add()、AddRange()方法和Insert()方法向集合中添加项目,然后使用RemoveAt()进行删除,代码如下。

        BulletedList1.Items.Add(new ListItem("Add()方法添加内容", "Add()方法添加内
        容"));
        ListItem[] li = { new ListItem("AddRange()添加1", "AddRange()添加1"), new
        ListItem("AddRange()添加2", "AddRange()添加2") };
        BulletedList1.Items.AddRange(li);
        BulletedList1.Items.Insert(0, new ListItem("插入到第1位", "插入到第一位"));
        BulletedList1.Items.RemoveAt(1);

3.5.3 ListBox控件

ListBox控件是另一种形式的列表控件,其列举项的添加和删除通常仅通过后台代码来控制。

ListBox控件允许用户从预定义的列表中选择一项或多项,其显示的列表项目数量根据控件的大小来决定。其在工具箱中的符号为。读者可以从以下两个方面控制列表的外观。

(1)显示的行数:可以将该控件设置为显示特定的项数,如果该控件包含比设置的项数更多的项,则显示一个垂直滚动条。

(2)宽度和高度:可以以像素为单位设置控件的大小。在这种情况下,控件将忽略已设置的行数,而是显示足够多的行直至填满控件的高度。

1.ListBox控件的属性

ListBox控件有许多常用属性,如DataSource、AutoPostBack、SelectedIndex和SelectedValue等,表3-11对常用的属性进行了说明。

表3-11 ListBox控件的常用属性

通常情况下,用户可以通过单击列表中的单个项来选择它。如果将ListBox控件SelectionMode属性的值设置Multiple(即允许进行多重选择),则用户可以在按住Ctrl或Shift键的同时,单击以选择多个项。

如下代码通过SelectedIndex属性设置了ListBox控件的索引项。

        ListBox1.SelectedIndex = 2;

2.ListBox控件的事件

当用户选择某一项时,ListBox控件就会引发SelectedIndexChanged事件。但是默认情况下,该事件不会导致将页发送到服务器。例如,在ListBox的SelectedIndexChanged事件中判断某一项是否选中,代码如下。

        protected void ListBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            foreach (ListItem item in ListBox1.Items){
              if (item.Selected) {
                  //省略代码
              }
            }
        }

3.向ListBox控件添加选项

ASP.NET中可以使用三种方式向ListBox控件中添加项,如下所示。

(1)在设计时添加静态项。

(2)使用编程的方式在运行时添加项。

(3)使用数据绑定添加项。

如下代码通过DataSource、DataTextField和DataValueField属性演示了如何通过编程动态绑定数据。

        ListBoxShow.DataSource = GetPlaceList();   //该方法可以返回DataTable对象
        ListBoxShow.DataTextField = "placeName";   //对应后台数据库中的字段名
        ListBoxShow.DataValueField = "placeId";    //对应后台数据库的字段名

4.确定ListBox控件的所选内容

使用ListBox控件时最常见的内容是确定用户已选择了哪一项或哪些项,其主要取决于该控件允许单项选择还是多重选择。有两种方式确定单项选择列表控件的选定内容,如下所示。

(1)如果获取选择项的索引值,需要使用SelectedIndex属性的值。该属性的索引是从0开始的,如果没有选择任何项,则该属性的值是-1。

(2)如果获取选择项的内容,需要使用SelectedItem属性,该属性返回一个ListItem类型的对象。通过该对象的Text属性或Value属性可以获取选择项的内容。

如果ListBox控件允许多重选择时,确定ListBox控件所选中的内容,需要依次通过控件的Items集合,分别测试每一项的Selected属性。主要代码如下。

        Protected void Button1_Click(object sender, System.EventArgs e)
        {
            string msg = "" ;
            foreach(ListItem li in ListBox1.Items)          //遍历集合中的内容
            {
              if(li.Selected == true)                       //判断某一项是否选中
                  {
                    msg += "<br>" + li.Text + " is selected.";
                  }
            }
            Label1.Text = msg;
        }