ASP.NET listBbox控件用法
ListBox基本功能使用方法
2011-06-09 13:23:16| 分类: .NET/C# | 标签:listbox基本功能使用方法 |举报 |字号大中小 订阅
- ListBox基本功能使用方法
ListBox基本功能首先是列表项的添加,客户端实现代码添加在listbox实例化代码中间,例如:
<asp:ListItem Value="value" Selected=True>Text</asp:ListItem>
若在服务器端实现,为避免每次加载时执行添加列表项,上述代码包含在下面代码中:
if(!IsPostBack)
{
}
WebForm页面上须添加2个listbox(listbox1和lixtbox2)和2个命令按钮,listbox1不为空。列表项从listbox1添加到listbox2须在Button1单击事件中调用Add方法:
ListBox2.Items.Add(ListBox1.SelectedValue);
若要从listbox2中删除列表项的话须在Button2单击事件中调用Remove方法:
ListBox2.Items.Remove(ListBox2.SelectedValue);
列表项从listbox1添加到listbox2后,列表项从listbox1中删除:
int i=0;
while(i<ListBox1.Items.Count)
{
if(ListBox1.Items[i].Selected==true)
{
ListBox2.Items.Add(ListBox1.Items[i]);
ListBox1.Items.Remove(ListBox1.Items[i]);
}
else
i+=1;
}
这样只能实现单项添加,想要实现多项添加,首先设置ListBox1的SelectionMode属性值Multiple,ListBox1允许多项选中。
在Button1单击事件中添加
foreach(ListItem MyItem in ListBox1.Items)
if(MyItem.Selected==true)
ListBox2.Items.Add(MyItem);
想要一次清空ListBox2中所有选项可在Button2单击事件中调用clear方法,
ListBox2.Items.Clear();
若列表项已经添加,不允许二次添加,Button1单击事件中的代码包含在:
if(ListBox2.Items.FindByValue(ListBox1.SelectedValue)==null)
{
}
ListBox与数据库绑定就是指定他的DataSource和DataTextField属性,
ListBox2.DataSource=数据源;
ListBox2.DataTextField="字段名";
ListBox2.DataBind();
<script type="text/javascript">
function SelectAll()
{
var lst1=window.document.getElementById("<%=lb_Sourse.ClientID %>");
var length = lst1.options.length;
var string = window.document.getElementById("<%=hf_NewName.ClientID %>")
for(var i=0;i<length;i++)
{
var v = lst1.options[i].value;
var t = lst1.options[i].text;
var lst2=window.document.getElementById("<%=lb_NewName.ClientID %>");
lst2.options[i] = new Option(t,v,true,true);
string.value+=v;
}
}
function DelAll()
{
var lst2=window.document.getElementById("<%=lb_NewName.ClientID %>");
var length = lst2.options.length;
for(var i=length;i>0;i--)
{
lst2.options[i-1].parentNode.removeChild(lst2.options[i-1]);
}
}
function SelectOne()
{
var string = window.document.getElementById("<%=hf_NewName.ClientID %>")
var lst1=window.document.getElementById("<%=lb_Sourse.ClientID %>");
var lst2=window.document.getElementById("<%=lb_NewName.ClientID %>");
var lstindex=lst1.selectedIndex;
var length = lst2.options.length;
var isExists = false;
if(lstindex<0)
return;
else if(length != null)
{
for(var i=0;i < length; i++)
{
if(lst2.options[i].text == lst1[lstindex].text&&lst2.options[i].value == lst1[lstindex].value)
{
isExists = true;
}
}
}
else
{
return;
}
if (isExists == false)
{
var v = lst1.options[lstindex].value;
var t = lst1.options[lstindex].text;
lst2.options[lst2.options.length] = new Option(t,v,true,true);
string.value+=v;
}
else
{
alert("所选条目已经存在");
return false;
}
}
function DelOne()
{
var lst2=window.document.getElementById("<%=lb_NewName.ClientID %>");
var lstindex=lst2.selectedIndex;
if(lstindex>=0)
{
var v = lst2.options[lstindex].value+";";
lst2.options[lstindex].parentNode.removeChild(lst2.options[lstindex]);
}
}
</script>
需要解释的是由于JS脚本是在客户端执行的,因此服务器端控件是无法调用JS的,由于ID无法被找到,但用<%=lb_NewName.ClientID %>的方法就巧妙的解决得该问题,是asp控件拥有客户端id,这样就可以调用了。
希望对大家有所帮助!
ASP.NET中添加控件ListBox , 属性设为 Multiple , 则可进行多选.
就以两个listbox之间多选添加项目为例.
两个控件为listboxleft , listboxright 定义了一个动态数组用于中间存储 arrRight .具体代码如下:
//读取右边选中项目
ArrayList arrRight = new ArrayList();
foreach(ListItem item in this.ListBoxRight.Items) //按类型listitem读取listbox中选定项
{
if(item.Selected) //判断是否选中
{
arrRight.Add(item);
}
}
//右边移除选定项目 左边添加
foreach(ListItem item in arrRight)
{
this.ListBoxLeft.Items.Add(item);
this.ListBoxRight.Items.Remove(item);
}
不能将item的添加删除直接写在if(item.Selected){}内,因为项目remove后会出现错误
添加两个listbox (ListBoxAll , ListBoxUser) 两个按钮( ButtonListDel >> , ButtonListAdd <<)
按钮的代码为:
private void ButtonListDel_Click(object sender, System.EventArgs e)
{
//listbox >> 删除listboxuser选中项目 将其添加入listboxall
if(this.ListBoxUser.SelectedIndex != -1)
{
this.ListBoxAll.Items.Add(this.ListBoxUser.SelectedItem.Value);
this.ListBoxUser.Items.Remove(this.ListBoxUser.SelectedItem.Value);
}
}
private void ButtonListAdd_Click(object sender, System.EventArgs e)
{
//listbox <<
if(this.ListBoxAll.SelectedIndex != -1)
{
this.ListBoxUser.Items.Add(this.ListBoxAll.SelectedItem.Value);
this.ListBoxAll.Items.Remove(this.ListBoxAll.SelectedItem.Value);
}
}
1 为了确保添加不会重复 填充listbox时使两边无重复项目.
完成listbox里项目的添加、删除的关键代码:
1.通过AddRange方法添加项目:this.lbyx.Items.AddRange(new object[] {"北京","上海","天津","成都","广州","深圳","武汉"});
2.添加items:this.lbbx.Items.Add(this.lbyx.Text);
3.清空列表内的所有items:this.lbbx.Items.Clear();
4.当前所选项的编号获取:this.lbbx.SelectedIndex
5.删除某项:this.lbbx.Items.RemoveAt(this.lbbx.SelectedIndex);
在从一个ListBox选择内容copy到另外一个ListBox时候用下面的方法:
if (ListBox2.Items.IndexOf(ListBox1.SelectedItem) == -1)
{
ListBox2.Items.Add(new ListItem(ListBox1.SelectedValue));
//ListBox2.Items.Add(ListBox1.SelectedItem); <--用这个会记录状态,ListBox2不支持Multiple就出错了
}
===================================================================
<asp:listbox width="100px" runat=server>
<asp:listitem>Roman</asp:listitem>
<asp:listitem>Arial Black</asp:listitem>
<asp:listitem>Garamond</asp:listitem>
<asp:listitem>Somona</asp:listitem>
<asp:listitem>Symbol</asp:listitem>
</asp:listbox>
void RemoveAllBtn_Click(Object Src, EventArgs E) {
while (InstalledFonts.Items.Count != 0) {
AvailableFonts.Items.Add(new ListItem(InstalledFonts.Items[0].Value));
InstalledFonts.Items.Remove(InstalledFonts.Items[0].Value);
}
}
当数据源改为
<asp:listbox width="100px" runat=server>
<asp:listitem value="1">Roman</asp:listitem>
<asp:listitem value="bbb">Arial Black</asp:listitem>
<asp:listitem value="333">Garamond</asp:listitem>
<asp:listitem value="4">Somona</asp:listitem>
<asp:listitem value="5">Symbol</asp:listitem>
</asp:listbox>
listbox.items.count会一直为总数,不会顺while循环的变化,可以修改为如果方法:
#region button
private void btnRemoveAll_Click(object sender, System.EventArgs e)
{
while (lstSelDpt.Items.Count != 0)
{
lstAllDpt.Items.Add(lstSelDpt.Items[lstSelDpt.Items.Count-1]);
lstSelDpt.Items.RemoveAt(lstSelDpt.Items.Count-1);
}
}
private void btnRemove_Click(object sender, System.EventArgs e)
{
while(lstSelDpt.SelectedIndex != -1)
{
lstAllDpt.Items.Add(lstSelDpt.Items[lstSelDpt.SelectedIndex]);
lstSelDpt.Items.Remove(lstSelDpt.Items[lstSelDpt.SelectedIndex]);
}
}
private void btnAdd_Click(object sender, System.EventArgs e)
{
while (lstAllDpt.SelectedIndex != -1)
{
lstSelDpt.Items.Add(lstAllDpt.Items[lstAllDpt.SelectedIndex]);
lstAllDpt.Items.Remove(lstAllDpt.Items[lstAllDpt.SelectedIndex]);
}
}
private void btnAddAll_Click(object sender, System.EventArgs e)
{
while (lstAllDpt.Items.Count != 0)
{
lstSelDpt.Items.Add(lstAllDpt.Items[lstAllDpt.Items.Count-1]);
lstAllDpt.Items.Remove(lstAllDpt.Items[lstAllDpt.Items.Count-1]);
}
}
#endregion
用dotnet做一个项目的过程中,遇到了一个ListBox的问题:通过在一个ListBox中双击,把选中的项添加到另一个ListBox中,但ListBox控件本身并没有该事件,那么如何实现呢?我就想到了客户端脚本javascrit,通过查阅相关资料,终于把这个问题解决了,现在写出来与大家分享,希望能对大家有所帮助。
这里有三个问题:
第一:双击所要执行的javascript代码是什么?
注意:javascript代码的语法要正确,即每一行都要以“;”结尾;
function change()
{
var addOption=document.createElement("option");
var index1;
if(document.Form1.ListBox1.length==0)return(false);
index1=document.Form1.ListBox1.selectedIndex;
if(index1<0)return(false);
addOption.text=document.Form1.ListBox1.options(index1).text;
addOption.value=document.Form1.ListBox1.value;
document.Form1.ListBox2.add(addOption);
document.Form1.ListBox1.remove (index1);
}
第二:如何将 javascript 代码转换为C#代码?
public static void ListBox_DblClick(Page page,System.Web.UI.WebControls.WebControl webcontrol,string SourceControlName,string TargetControlName)
{
SourceControlName = "document.Form1." + SourceControlName;
TargetControlName = "document.Form1." + TargetControlName;
string js = "<script language=javascript> function change(SourceControlName,TargetControlName)";
js += "{";
js += "var addOption=document.createElement('option'); \n";
js += " var index1; \n";
js += "if(SourceControlName.length==0)return(false);\n";
js += " index1=SourceControlName.selectedIndex; \n ";
js += " if(index1<0)return(false);\n";
js += " addOption.text=SourceControlName.options(index1).text; \n";
js += "addOption.value=SourceControlName.value; \n";
js += "TargetControlName.add(addOption); \n";
js += "SourceControlName.remove (index1) \n";
js +="}";
js += "</script>";
//注册该 javascript ;
page.RegisterStartupScript("",js);
//为控件添加双击事件;
webcontrol.Attributes.Add("onDblClick","change(" + SourceControlName + "," + TargetControlName + ");");
}
在该方法中,SourceControlName是要绑定双击事件的控件,TargetControlName是接收双击事件选定项的控件。
这里有一个问题,如何让对象作为参数传给javascript的change函数,我这里采用的是用 SourceControlName ,TargetControlName 来传递两个ListBox的Name, 然后与“document.Form1.“组合成一个串来传递给javascript的change函数,即
SourceControlName = "document.Form1." + SourceControlName;
TargetControlName = "document.Form1." + TargetControlName;
第三:如何为控件添加双击事件?
用ControlName.Attributes.Add(“属性名称”,“函数名称或代码”);
ASP.NET listBbox控件用法的更多相关文章
- asp.net Listbox控件用法
2008-02-18 19:56 来源: 作者: ListBox(列表框)控件可以显示一组项目的列表,用户可以根据需要从中选择一个或多个选项.列表框可以为用户提供所有选项的列表.虽然也可设置列表框为多 ...
- asp.net中Repeater控件用法笔记
大家可能都对datagrid比较熟悉,但是如果在数据量大的时候,我们就得考虑使用 repeater作为我们的数据绑定控件了.Repeater控件与DataGrid (以及DataList)控件的主要区 ...
- CustomValidator控件用法
虽然大部分时间一直从事asp.net的开发,对于一些常用的asp.net服务器端验证控件及它们的组合使用比较熟悉,如:CompareValidator ——比较验证控件RangeValidator — ...
- ASP.NET ValidationSummary 控件
ASP.NET ValidationSummary 控件 Validation 服务器控件 定义和用法 ValidationSummary 控件用于在网页.消息框或在这两者中内联显示所有验证错误的摘要 ...
- Jquery + css 日期控件用法实例.zip
/*==============================================================================** Filename:common.j ...
- asp.net分页控件
一.说明 AspNetPager.dll这个分页控件主要用于asp.net webform网站,现将整理代码如下 二.代码 1.首先在测试页面Default.aspx页面添加引用 <%@ Reg ...
- asp.net ajax控件tab扩展,极品啊,秒杀其它插件
说明:asp.net ajax控件tab要设置width和height,而且在线文本编辑器放能够放入tab中,也必须是asp.net的控件型在线文本,例如fckeditor,下面是我设置好的配置. & ...
- javascript获取asp.net服务器端控件的值
代码如下: <%@ Page Language="C#" CodeFile="A.aspx.cs" Inherits="OrderManage_ ...
- ASP.NET控件<ASP:Button /> html控件<input type="button">区别联系
ASP.NET控件<ASP:Button />-------html控件<input type="button">杨中科是这么说的:asp和input是一样 ...
随机推荐
- 迁移 Qt4 至 Qt5 的几个主要环节(数据库插件别拷错了地方)
Qt5推出一段时间了,经过了试用,虽然还存在一些问题,比如Designer 缺少 WebView 和 ActiveQt 的UI工具,此外 WebKit 的 Release 版本似乎和Visual-St ...
- Git与SVN的比较及优点
前天处女面被问到了你为什么要用Git而不用SVN,答的不是很理想,正好今天晚上小组内部进行了Git使用的培训,便想着总结一下Git与SVN的差异以及Git的优点. 一.Git与SVN的比较 1.git ...
- aix Mysql安装 Oracle官方教程
http://dev.mysql.com/doc/refman/5.1/en/aix-installation.html (aix Mysql安装 Oracle官方教程)
- HTML字符实体(Character Entities),转义字符串(Escape Sequence)【转】
为什么要用转义字符串? HTML中<,>,&等有特殊含义(<,>,用于链接签,&用于转义),不能直接使用.这些符号是不显示在我们最终看到的网页里的,那如果我们希 ...
- oracle 物化视图导入导出报错
1.exp导出报EXP-00008: 遇到 ORACLE 错误 1455,ORA-01455: 转换列溢出整数数据类型 2.imp导入报.注: 表包括 ROWID 列, 其值可能已废弃,不是警告也不是 ...
- startActivityForResult不返回结果
startActivityForResult不返回结果,请检查AndroidManifest中的描写叙述,是否对该Activity设置了:launchMode="singleTask&quo ...
- VB.NET的反射机制
1.前提 Net的应用程序由几个部分:‘程序集’.‘模块’.‘类型’组成. 装配件是.Net应用程序执行的最小单位,编译出来的.dll..exe都是装配件. 2.概念 反射是获得运行时类型的方式. 概 ...
- mysql insert和前台显示乱码
近期在搞服务端.遇到问题例如以下, 在mysql中插入中文乱码.或mysql中中文正常显示,但jsp在前台显示mysql中的中文时乱码. 解决方法,进入mysql控制台,运行 SET characte ...
- Haffman算法(C++)
Huffman编码,C++实现,只是为了说明大致的思路,还有很多不完美之处,比如在输入数据超出限制等条件下会出现错误. #include<iostream> #include<str ...
- PLSQL笔记
/*procedurallanguage/sql*/--1.过程.函数.触发器是pl/sql编写的--2.过程.函数.触发器是在oracle中的--3.pl/sql是非常强大的数据库过程语言--4.过 ...