### ListBox 控件

#### 1．ListBox 控件的概述

ListBox 控件用于显示一组列表项，用户可以从中选择一项或多项。如果列表项的总数超出可以显示的项数，则 ListBox 控件会自动添加滚动条。图 1 为 ListBox 控件。

图 1 ListBox 控件

（1）ListBox 控件常用的属性

ListBox 控件常用的属性及说明如表 1 所示。

表 1 ListBox 控件常用的属性

属性名称 | 属性值
Items | 获取列表控件项的集合
SelectionMode | 获取或设置 ListBox 控件的选择格式
SelectedIndex | 获取或设置列表控件中选定项的最低序号索引
SelectedItem | 获取列表控件中索引最小的选中的项
SelectedValue | 获取列表控件中选定项的值，或选择列表控件中包含指定值的项
Rows | 获取或设置 ListBox 控件中显示的行数
DataSource | 获取或设置对象，数据绑定控件从该对象中检索其数据项列表
ID | 获取或设置分配给服务器控件的编程标识符

下面主要介绍一下 ListBox 控件的 Items 属性、DataSource 属性和 SelectionMode 属性。

q Items 属性

Items 属性主要是用来获取列表控件的集合，使用 Items 属性为 ListBox 控件添加列表项的方法有两种，下面分别来介绍一下：

l 通过属性窗口为 ListBox 控件添加列表项

首先，打开属性窗口，单击 Items 属性后面的 图标按钮，会弹出一个如图 2 所示的“ListItem 集合编辑器”对话框。

图 2 ListItem 集合编辑器

其次，在该“ListItem 集合编辑器”对话框中，用户可以通过单击【添加】按钮，为 ListBox 控件添加列表项，用户可以选中该列表项，在属性窗口中修改该列表项的属性值。当为 ListBox 控件添加完列表项后；还可以选中列表项，单击【↑】和【↓】按钮更改列表项的位置，单击【移除】按钮从列表项中，将该项删除。如图 3 所示。

图 3 添加列表项

最后，单击【确定】按钮，返回到页面中，在 ListBox 控件中将会呈现已添加的列表项。

l 使用 Items.Add 方法为 ListBox 控件添加列表项

在后台代码中，可以编写如下代码，使用 Items.Add 方法为 ListBox 控件添加列表。

lbxSource.Items.Add("星期日");

lbxSource.Items.Add("星期一");

lbxSource.Items.Add("星期二");

lbxSource.Items.Add("星期三");

lbxSource.Items.Add("星期四");

lbxSource.Items.Add("星期五");

lbxSource.Items.Add("星期六");

q SelectionMode 属性是 ListBox 列表控件的选择模式，该属性的设置选项有以下两种。

l 单选（Single）：用户只能在列表框中选中一项。

l 多选（MultiLine）：用户可以在列表框中选中多项。

q DataSource 属性

通过使用 DataSource 属性可以从数组或集合中获取列表项并将其添加到控件中。当编程人员希望从数组或集合中填充控件时，可以使用此属性。例如，在后台代码中，编写如下代码，将数组绑定到 ListBox 控件中。其代码如下：

ArrayList arrList = new ArrayList();

arrList.Add("星期日");

arrList.Add("星期一");

arrList.Add("星期二");

arrList.Add("星期三");

arrList.Add("星期四");

arrList.Add("星期五");

arrList.Add("星期六");

ListBox1.DataSource = arrList;

ListBox1.DataBind();

注意：在使用 ArrayList 类数组之前，需要引用 ArrayList 类的命名空间，其引用代码为：using System.Collections;

（2）ListBox 控件常用的方法

ListBox 控件常用的方法是 DataBind。当 ListBox 控件使用 DataSource 属性附加数据源时，使用 DataBind 方法将数据源绑定到 ListBox 控件上。

#### 2．ListBox 控件选项的多选和单选操作

下面示例实现的主要功能是对 ListBox 控件中的列表项进行多选和单选操作。执行程序，示例运行结果如图 4 所示，在源列表框中选择部分项，单击【<】按钮后，将会把源列表框中选择的项移到目的列表框中，运行结果如图 5 所示。

图 4 ListBox 控件（选择前）

图 5 ListBox 控件（选择后）

程序实现的主要步骤：

新建一个网站，默认主页为 Default.aspx，在 Default.aspx 页面上添加两个 ListBox 控件和 4 个 Button 按钮，其属性设置及其用途如表 2 所示。

表 2 Default.aspx 页面中控件的属性设置及其用途

控件类型 | 控件名称 | 主要属性设置 | 用途
标准/ListBox 控件 | lbxDest | SelectionMode 属性设置为“Multiple” | 目的列表框
lbxSource | SelectionMode 属性设置为“Multiple” | 源列表框
标准/Button 控件 | Button1 | Text 属性设置为“<<” | 执行全选功能
Button2 | Text 属性设置为“>>” | 执行全删功能
Button3 | Text 属性设置为“<” | 执行单选功能
Button4 | Text 属性设置为“>” | 执行单删功能

如果需要将源列表框中的项全部移到目的列表框中，可以单击【<<】按钮。【<<】按钮的 Click 事件代码如下：

protected void Button1_Click(object sender, EventArgs e)

{

//获取列表框的选项数

int count = lbxSource.Items.Count;

int index = 0;

//循环从源列表框中转移到目的列表框中

for (int i = 0; i < count; i++)

{

ListItem Item = lbxSource.Items[index];

lbxSource.Items.Remove(Item);

lbxDest.Items.Add(Item);

}

//获取下一个选项的索引值

index++;

}

如果需要将源列表框中的部分选项移到目的列表框中，可以单击【<】按钮。【<】按钮的 Click 事件代码如下：

protected void Button3_Click(object sender, EventArgs e)

{

//获取列表框的选项数

int count = lbxSource.Items.Count;

int index = 0;

//循环判断各个项的选中状态

for (int i = 0; i < count; i++)

{

ListItem Item = lbxSource.Items[index];

//如果选项为选中状态从源列表框中删除并添加到目的列表框中

if (lbxSource.Items[index].Selected == true)

{

lbxSource.Items.Remove(Item);

lbxDest.Items.Add(Item);

//将当前选项索引值减 1

index--;

}

//获取下一个选项的索引值

index++;

}

}

#### 3．ListBox 控件选项的上移和下移操作

下面示例实现的主要功能是对 ListBox 控件中的列表项进行上移和下移操作。执行程序，示例运行结果如图 6 所示，在列表框中选中最后一项，单击【上移】按钮后，选中的项将会向上移动，运行结果如图 7 所示。

图 6 ListBox 控件（上移前）

图 7 ListBox 控件（上移后）

程序实现的主要步骤：

新建一个网站，默认主页为 Default.aspx，在 Default.aspx 页面上添加一个 ListBox 控件和 4 个 Button 按钮，其属性设置及其用途如表 3 所示。

表 3 Default.aspx 页面中控件的属性设置及其用途

控件类型 | 控件名称 | 主要属性设置 | 用途
标准/ListBox 控件 | lbxSource | SelectionMode 属性设置为“Multiple” | 列表框
标准/Button 控件 | Button1 | Text 属性设置为“上移” | 执行上移选中项功能
Button2 | Text 属性设置为“下移” | 执行下移选中项功能
Button3 | Text 属性设置为“循环上移” | 执行循环上移选中项功能
Button4 | Text 属性设置为“循环下移” | 执行循环下移选中项功能

如果需要将列表框中选中的项上移，可以单击【上移】按钮。【上移】按钮的 Click 事件代码如下：

protected void Button1_Click(object sender, EventArgs e)

{

//若不是第一行则上移

if (lbxSource.SelectedIndex > 0 && lbxSource.SelectedIndex <= lbxSource.Items.Count - 1)

{

//记录当前选项的值

string name = lbxSource.SelectedItem.Text;

string value = lbxSource.SelectedItem.Value;

//获取当前选项的索引号

int index = lbxSource.SelectedIndex;

//交换当前选项和其前一项的索引号

lbxSource.SelectedItem.Text = lbxSource.Items[index - 1].Text;

lbxSource.SelectedItem.Value = lbxSource.Items[index - 1].Value;

lbxSource.Items[index - 1].Text = name;

lbxSource.Items[index - 1].Value = value;

//设定上一项为当前选项

lbxSource.SelectedIndex--;

}

}

如果需要将列表框中选中的项向下移动，可以单击【下移】按钮。【下移】按钮的 Click 事件代码如下：

protected void Button2_Click(object sender, EventArgs e)

{

//若不是最后一行则下移

if (lbxSource.SelectedIndex >= 0 && lbxSource.SelectedIndex < lbxSource.Items.Count - 1)

{

//保存当前选项的信息

string name = lbxSource.SelectedItem.Text;

string value = lbxSource.SelectedItem.Value;

//获取当前选项的索引号

int index = lbxSource.SelectedIndex;

//交换当前选项与下一项的信息

lbxSource.SelectedItem.Text = lbxSource.Items[index + 1].Text;

lbxSource.SelectedItem.Value = lbxSource.Items[index + 1].Value;

lbxSource.Items[index + 1].Text = name;

lbxSource.Items[index + 1].Value = value;

//设定下一项为当前选项

lbxSource.SelectedIndex++;

}

}