记录ListBox的基本应用。
使用的数据库文件:
链接:https://pan.baidu.com/s/1w_3qnRU7zcCfJEIYq3Ik-g
提取码:l4y0
一、实现获取ListBox文本内容并输出到文本框当中
前端代码:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="test01.aspx.cs" Inherits="test01" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:ListBox ID="ListBox1" runat="server" DataSourceID="AccessDataSource1" SelectionMode="Multiple"
DataTextField="CAI_NAME" DataValueField="ID" Height="168px" Width="107px"></asp:ListBox>
<asp:Button ID="Button1" runat="server" Text="选择" Height="23px"
onclick="Button1_Click" Width="51px" />
<asp:AccessDataSource ID="AccessDataSource1" runat="server"
DataFile="~/test.mdb" SelectCommand="SELECT * FROM [TB_CAI]">
</asp:AccessDataSource>
<br />
<br />
<asp:TextBox ID="TextBox1" runat="server" Height="95px" Width="183px"
TextMode="MultiLine"></asp:TextBox>
<br />
<br />
</div>
</form>
</body>
</html>
1.如何绑定数据源:在我之前的博客有提到:
2.SelectionMode="Multiple"表示此ListBox是可以多选的,而TextMode="MultiLine"代表多行文本框
后端代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class test01 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
//one
//TextBox1.Text = "";
//for (int i = 0; i < ListBox1.Items.Count;i++ )
//{
// if(ListBox1.Items[i].Selected)
// {
// TextBox1.Text += ListBox1.Items[i].Text + ",";
// }
//}
//two
foreach(ListItem li in ListBox1.Items)
{
if(li.Selected)
{
TextBox1.Text += li.Text + ",";
}
}
}
}
one注释的代码代表的是另一种方法,即使用for循环,但是相对于foreach来说需要写更多代码,复杂度更高
二、点击按钮事件实现ListBox内容调换
这个示例有点像很多软件的自定义功能选择等等,先上图
单选或者多选用户列表的选项,点击按钮,就会变更到授权列表。
前端代码:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="test02.aspx.cs" Inherits="test02" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<br />
用户列表
授权<br />
<br />
<asp:ListBox ID="ListBox1" runat="server" Height="170px" Width="108px" SelectionMode ="Multiple" ></asp:ListBox>
<asp:Button ID="Button1" runat="server" Text=">>" onclick="Button1_Click" />
<asp:Button ID="Button2" runat="server" Text="<<" onclick="Button2_Click" />
<asp:Button ID="Button3" runat="server" onclick="Button3_Click"
Text=">" />
<asp:Button ID="Button4" runat="server" Text="<" onclick="Button4_Click" />
<asp:ListBox ID="ListBox2" runat="server" Height="170px" Width="108px" SelectionMode ="Multiple">
</asp:ListBox>
</div>
</form>
</body>
</html>
后端代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class test02 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
ListBox1.Items.Add("Administrator");
ListBox1.Items.Add("Guest");
ListBox1.Items.Add("小王");
ListBox1.Items.Add("小刘");
ListBox1.Items.Add("小李");
}
}
protected void Button1_Click(object sender, EventArgs e)
{
for (int i = ListBox1.Items.Count - 1; i >= 0; i--)
{
ListItem li = ListBox1.Items[0];
ListBox1.Items.Remove(li);
ListBox2.Items.Add(li);
}
}
protected void Button2_Click(object sender, EventArgs e)
{
for (int i = ListBox2.Items.Count - 1; i >= 0; i--)
{
ListItem li = ListBox2.Items[0];
ListBox2.Items.Remove(li);
ListBox1.Items.Add(li);
}
}
protected void Button3_Click(object sender, EventArgs e)
{
for (int i = ListBox1.Items.Count - 1; i >= 0; i--)
{
ListItem li = ListBox1.Items[i];
if (ListBox1.Items[i].Selected)
{
ListBox1.Items.Remove(li);
ListBox2.Items.Add(li);
}
}
}
protected void Button4_Click(object sender, EventArgs e)
{
for (int i = ListBox2.Items.Count - 1; i >= 0; i--)
{
ListItem li = ListBox2.Items[i];
if (ListBox2.Items[i].Selected)
{
ListBox2.Items.Remove(li);
ListBox1.Items.Add(li);
}
}
}
}
拿button3按钮举例(’>’),基本思路是使用for循环去遍历用户列表的所有选项,然后每个选项判断是否被选中(ListBox1.Items[i].Selected),如果选中,在用户列表中删除这个选项,并在另一个列表增加此选项。
理论上这样的方法是行得通的,但是会出现一个bug:假设for循环遍历到第一个选项,即items[0],并假设确实选中了它,此选项被删除并添加到了另一个列表,但与此同时,下一个选项items[1]也就向上挪了一位,变成了items[0],导致我们在选中连续的n个选项的时候没办法全部进行转移,始终会漏几个选项。
所以在for循环的时候就可以改用从下遍历到上,即从最大遍历到最小
for (int i = ListBox1.Items.Count - 1; i >= 0; i–)
ListBox1.Items.Count-1的作用是防止越界
这样操作的话就可以避免上面的bug出现