ASP.NET中,使用两个ListBox双击实现左右移动
ASP.NET中,使用两个ListBox实现左右移动,就是双击左边ListBox里的值,右边ListBox中的Item就增加该值,同事左边那个ListBox中双击的值消失...
ASP.NET中,使用两个ListBox实现左右移动,就是双击左边ListBox里的值,右边ListBox中的Item就增加该值,同事左边那个ListBox中双击的值消失。具体代码我已经写好。关键我写的是通过按钮点击来实现该功能的。但是我需要是通过双击来实现同样的过程!一以下是我所开发功能中的部分代码:
// 从左边的listbox选中的项向右边的listbox添加
protected void btnAdd_Click(object sender, EventArgs e)
{
if (lbLeft.SelectedIndex <= -1)//判断是否有选中的项,如果没有,则弹出对话框并返回
{
Response.Write("<script>alert('请选择要添加关注的人员!');</script>");
return;
}
int index = 0;
for (int i = 0; i < this.lbLeft.Items.Count; i++)
{
if ((this.lbLeft.Items[i].Selected) && (this.lbRight.Items.FindByValue(this.lbLeft.Items[i].Value) == null))
{
ListItem item = lbLeft.Items[i];
this.lbLeft.Items.Remove(item);
index--;
this.lbRight.Items.Add(item);
}
}
}
// 从右边将选中的删除
protected void btnDel_Click(object sender, EventArgs e)
{
if (lbRight.SelectedIndex <= -1)//判断是否有选中的项,如果没有,则弹出对话框并返回
{
Response.Write("<script>alert('请选择要删除关注的人员!');</script>");
return;
}
int total = this.lbRight.Items.Count;
int index = 0;
for (int i = 0; i < total; i++)
{
ListItem item = this.lbRight.Items[index];
if (this.lbRight.Items[index].Selected)
{
this.lbRight.Items.Remove(item);
index--; //listbox删除一行后,后面的一行将自动移上去
this.lbLeft.Items.Add(item);
}
index++;
}
}
呵呵!我解决了。和你们写的不一样。可能是太累了头发昏的原因。迷茫了。就那么简单的问题。唉。看来以后还是要注意适当休息。我是这么弄的,在页面上加了个label 然后CS里面这样做的:
protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
{
dbBind();
dbBind2();
}
if (Request.Params["lbLeftHidden"] != null && (string)Request.Params["lbLeftHidden"] == "doubleclicked")
{
doubleLeft();
}
if (Request.Params["lbRightHidden"] != null && (string)Request.Params["lbRightHidden"] == "doubleclicked")
{
doubleRight();
}
}
不过还是谢谢你们了,毕竟你们很热情的帮忙了! 展开
// 从左边的listbox选中的项向右边的listbox添加
protected void btnAdd_Click(object sender, EventArgs e)
{
if (lbLeft.SelectedIndex <= -1)//判断是否有选中的项,如果没有,则弹出对话框并返回
{
Response.Write("<script>alert('请选择要添加关注的人员!');</script>");
return;
}
int index = 0;
for (int i = 0; i < this.lbLeft.Items.Count; i++)
{
if ((this.lbLeft.Items[i].Selected) && (this.lbRight.Items.FindByValue(this.lbLeft.Items[i].Value) == null))
{
ListItem item = lbLeft.Items[i];
this.lbLeft.Items.Remove(item);
index--;
this.lbRight.Items.Add(item);
}
}
}
// 从右边将选中的删除
protected void btnDel_Click(object sender, EventArgs e)
{
if (lbRight.SelectedIndex <= -1)//判断是否有选中的项,如果没有,则弹出对话框并返回
{
Response.Write("<script>alert('请选择要删除关注的人员!');</script>");
return;
}
int total = this.lbRight.Items.Count;
int index = 0;
for (int i = 0; i < total; i++)
{
ListItem item = this.lbRight.Items[index];
if (this.lbRight.Items[index].Selected)
{
this.lbRight.Items.Remove(item);
index--; //listbox删除一行后,后面的一行将自动移上去
this.lbLeft.Items.Add(item);
}
index++;
}
}
呵呵!我解决了。和你们写的不一样。可能是太累了头发昏的原因。迷茫了。就那么简单的问题。唉。看来以后还是要注意适当休息。我是这么弄的,在页面上加了个label 然后CS里面这样做的:
protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
{
dbBind();
dbBind2();
}
if (Request.Params["lbLeftHidden"] != null && (string)Request.Params["lbLeftHidden"] == "doubleclicked")
{
doubleLeft();
}
if (Request.Params["lbRightHidden"] != null && (string)Request.Params["lbRightHidden"] == "doubleclicked")
{
doubleRight();
}
}
不过还是谢谢你们了,毕竟你们很热情的帮忙了! 展开
4个回答
展开全部
首先你的代码和楼上的,都可以实现你的目的,但是这是通过页面不断提交来实现的,页面不断刷新,对用户的影响是很大的,用户看到你的页面不断在闪,体验很差,而且如果网络延迟比较大,这个刷新的速度也很慢
一般你的这个要求,最好使用Javascript来实现,我按你的想法,做了一个页面,你可以试试,这个页面上有按钮,也可以通过双击实现,代码如下:
只有aspx页面的代码,没有cs代码:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Top.aspx.cs" Inherits="FFCS.EIS.WorkFlow.Top" %>
<!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>
<script type="text/javascript">
function Sw(flg) {
var source, target;
switch (flg) {
case 1:
case 2:
source = document.getElementById("l1");
target = document.getElementById("l2");
break;
case 3:
case 4:
source = document.getElementById("l2");
target = document.getElementById("l1");
break;
}
for (var i = source.options.length - 1; i >= 0; i--) {
var opn = source.options[i];
if (flg == 1 || flg == 4 || opn.selected) {
AddOption(target, opn.innerText, opn.value);
opn.parentNode.removeChild(opn);
}
}
}
function AddOption(lst, txt, val) {
var oOption = document.createElement("OPTION");
lst.options.add(oOption);
oOption.innerText = txt;
oOption.value = val;
return oOption;
}
</script>
<table border="1" cellpadding="0" cellspacing="0">
<tr>
<td style="width:100px; text-align:center;">
<asp:ListBox ID="l1" runat="server" ondblclick="Sw(2);">
<asp:ListItem Text="1"></asp:ListItem>
<asp:ListItem Text="2"></asp:ListItem>
<asp:ListItem Text="3"></asp:ListItem>
</asp:ListBox>
</td>
<td style="vertical-align:middle;">
<input type="button" value=">|" onclick="Sw(1);" /><br />
<input type="button" value=">" onclick="Sw(2);" /><br /><br />
<input type="button" value="<" onclick="Sw(3);" /><br />
<input type="button" value="|<" onclick="Sw(4);" /><br />
</td>
<td style="width:100px; text-align:center;">
<asp:ListBox ID="l2" runat="server" ondblclick="Sw(3);">
</asp:ListBox>
</td>
</tr>
</table>
</div>
</form>
</body>
</html>
一般你的这个要求,最好使用Javascript来实现,我按你的想法,做了一个页面,你可以试试,这个页面上有按钮,也可以通过双击实现,代码如下:
只有aspx页面的代码,没有cs代码:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Top.aspx.cs" Inherits="FFCS.EIS.WorkFlow.Top" %>
<!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>
<script type="text/javascript">
function Sw(flg) {
var source, target;
switch (flg) {
case 1:
case 2:
source = document.getElementById("l1");
target = document.getElementById("l2");
break;
case 3:
case 4:
source = document.getElementById("l2");
target = document.getElementById("l1");
break;
}
for (var i = source.options.length - 1; i >= 0; i--) {
var opn = source.options[i];
if (flg == 1 || flg == 4 || opn.selected) {
AddOption(target, opn.innerText, opn.value);
opn.parentNode.removeChild(opn);
}
}
}
function AddOption(lst, txt, val) {
var oOption = document.createElement("OPTION");
lst.options.add(oOption);
oOption.innerText = txt;
oOption.value = val;
return oOption;
}
</script>
<table border="1" cellpadding="0" cellspacing="0">
<tr>
<td style="width:100px; text-align:center;">
<asp:ListBox ID="l1" runat="server" ondblclick="Sw(2);">
<asp:ListItem Text="1"></asp:ListItem>
<asp:ListItem Text="2"></asp:ListItem>
<asp:ListItem Text="3"></asp:ListItem>
</asp:ListBox>
</td>
<td style="vertical-align:middle;">
<input type="button" value=">|" onclick="Sw(1);" /><br />
<input type="button" value=">" onclick="Sw(2);" /><br /><br />
<input type="button" value="<" onclick="Sw(3);" /><br />
<input type="button" value="|<" onclick="Sw(4);" /><br />
</td>
<td style="width:100px; text-align:center;">
<asp:ListBox ID="l2" runat="server" ondblclick="Sw(3);">
</asp:ListBox>
</td>
</tr>
</table>
</div>
</form>
</body>
</html>
展开全部
首先,把你的代码集合到一个方法中:
protected void initListBox()
{
if (ListBox1.SelectedIndex <= -1)//判断是否有选中的项,如果没有,则弹出对话框并返回
{
Response.Write("<script>alert('请选择要添加关注的人员!');</script>");
return;
}
int index = 0;
for (int i = 0; i < this.ListBox1.Items.Count; i++)
{
if ((this.ListBox1.Items[i].Selected) && (this.ListBox2.Items.FindByValue(this.ListBox1.Items[i].Value) == null))
{
ListItem item = ListBox1.Items[i];
this.ListBox1.Items.Remove(item);
index--;
this.ListBox2.Items.Add(item);
}
}
if (ListBox2.SelectedIndex <= -1)//判断是否有选中的项,如果没有,则弹出对话框并返回
{
Response.Write("<script>alert('请选择要删除关注的人员!');</script>");
return;
}
int total = this.ListBox2.Items.Count;
for (int i = 0; i < total; i++)
{
ListItem item = this.ListBox2.Items[index];
if (this.ListBox2.Items[index].Selected)
{
this.ListBox2.Items.Remove(item);
index--; //listbox删除一行后,后面的一行将自动移上去
this.ListBox1.Items.Add(item);
}
index++;
}
}
然后在page_load里加:
if (!IsPostBack)
{
initListBox();
ListBox1.Attributes.Add("ondblclick", "ChangeItem('" + ListBox1.ClientID + "','" + ListBox2.ClientID + "')");
ListBox2.Attributes.Add("ondblclick", "ChangeItem('" + ListBox2.ClientID + "','" + ListBox1.ClientID + "')");
}
最后在aspx里加JS处理方法:
<script>
function ChangeItem(l1,l2)
{
var cc = document.getElementById(l1).options[window.document.getElementById(l1).selectedIndex].value;
var dd = document.getElementById(l1).options[window.document.getElementById(l1).selectedIndex].text;
//alert(dd + ":" + cc);
document.getElementById(l1).options.remove(window.document.getElementById(l1).selectedIndex);
var op = new Option(dd,cc,false,false);
document.getElementById(l2).options.add(op);
}
</script>
我已经调试过,完全符合你的要求
protected void initListBox()
{
if (ListBox1.SelectedIndex <= -1)//判断是否有选中的项,如果没有,则弹出对话框并返回
{
Response.Write("<script>alert('请选择要添加关注的人员!');</script>");
return;
}
int index = 0;
for (int i = 0; i < this.ListBox1.Items.Count; i++)
{
if ((this.ListBox1.Items[i].Selected) && (this.ListBox2.Items.FindByValue(this.ListBox1.Items[i].Value) == null))
{
ListItem item = ListBox1.Items[i];
this.ListBox1.Items.Remove(item);
index--;
this.ListBox2.Items.Add(item);
}
}
if (ListBox2.SelectedIndex <= -1)//判断是否有选中的项,如果没有,则弹出对话框并返回
{
Response.Write("<script>alert('请选择要删除关注的人员!');</script>");
return;
}
int total = this.ListBox2.Items.Count;
for (int i = 0; i < total; i++)
{
ListItem item = this.ListBox2.Items[index];
if (this.ListBox2.Items[index].Selected)
{
this.ListBox2.Items.Remove(item);
index--; //listbox删除一行后,后面的一行将自动移上去
this.ListBox1.Items.Add(item);
}
index++;
}
}
然后在page_load里加:
if (!IsPostBack)
{
initListBox();
ListBox1.Attributes.Add("ondblclick", "ChangeItem('" + ListBox1.ClientID + "','" + ListBox2.ClientID + "')");
ListBox2.Attributes.Add("ondblclick", "ChangeItem('" + ListBox2.ClientID + "','" + ListBox1.ClientID + "')");
}
最后在aspx里加JS处理方法:
<script>
function ChangeItem(l1,l2)
{
var cc = document.getElementById(l1).options[window.document.getElementById(l1).selectedIndex].value;
var dd = document.getElementById(l1).options[window.document.getElementById(l1).selectedIndex].text;
//alert(dd + ":" + cc);
document.getElementById(l1).options.remove(window.document.getElementById(l1).selectedIndex);
var op = new Option(dd,cc,false,false);
document.getElementById(l2).options.add(op);
}
</script>
我已经调试过,完全符合你的要求
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
首先,把你的代码集合到一个方法中:
protected
void
initListBox()
{
if
(ListBox1.SelectedIndex
<=
-1)//判断是否有选中的项,如果没有,则弹出对话框并返回
{
Response.Write("<script>alert('请选择要添加关注的人员!');</script>");
return;
}
int
index
=
0;
for
(int
i
=
0;
i
<
this.ListBox1.Items.Count;
i++)
{
if
((this.ListBox1.Items[i].Selected)
&&
(this.ListBox2.Items.FindByValue(this.ListBox1.Items[i].Value)
==
null))
{
ListItem
item
=
ListBox1.Items[i];
this.ListBox1.Items.Remove(item);
index--;
this.ListBox2.Items.Add(item);
}
}
if
(ListBox2.SelectedIndex
<=
-1)//判断是否有选中的项,如果没有,则弹出对话框并返回
{
Response.Write("<script>alert('请选择要删除关注的人员!');</script>");
return;
}
int
total
=
this.ListBox2.Items.Count;
for
(int
i
=
0;
i
<
total;
i++)
{
ListItem
item
=
this.ListBox2.Items[index];
if
(this.ListBox2.Items[index].Selected)
{
this.ListBox2.Items.Remove(item);
index--;
//listbox删除一行后,后面的一行将自动移上去
this.ListBox1.Items.Add(item);
}
index++;
}
}
然后在page_load里加:
if
(!IsPostBack)
{
initListBox();
ListBox1.Attributes.Add("ondblclick",
"ChangeItem('"
+
ListBox1.ClientID
+
"','"
+
ListBox2.ClientID
+
"')");
ListBox2.Attributes.Add("ondblclick",
"ChangeItem('"
+
ListBox2.ClientID
+
"','"
+
ListBox1.ClientID
+
"')");
}
最后在aspx里加JS处理方法:
<script>
function
ChangeItem(l1,l2)
{
var
cc
=
document.getElementById(l1).options[window.document.getElementById(l1).selectedIndex].value;
var
dd
=
document.getElementById(l1).options[window.document.getElementById(l1).selectedIndex].text;
//alert(dd
+
":"
+
cc);
document.getElementById(l1).options.remove(window.document.getElementById(l1).selectedIndex);
var
op
=
new
Option(dd,cc,false,false);
document.getElementById(l2).options.add(op);
}
</script>
我已经调试过,完全符合你的要求
protected
void
initListBox()
{
if
(ListBox1.SelectedIndex
<=
-1)//判断是否有选中的项,如果没有,则弹出对话框并返回
{
Response.Write("<script>alert('请选择要添加关注的人员!');</script>");
return;
}
int
index
=
0;
for
(int
i
=
0;
i
<
this.ListBox1.Items.Count;
i++)
{
if
((this.ListBox1.Items[i].Selected)
&&
(this.ListBox2.Items.FindByValue(this.ListBox1.Items[i].Value)
==
null))
{
ListItem
item
=
ListBox1.Items[i];
this.ListBox1.Items.Remove(item);
index--;
this.ListBox2.Items.Add(item);
}
}
if
(ListBox2.SelectedIndex
<=
-1)//判断是否有选中的项,如果没有,则弹出对话框并返回
{
Response.Write("<script>alert('请选择要删除关注的人员!');</script>");
return;
}
int
total
=
this.ListBox2.Items.Count;
for
(int
i
=
0;
i
<
total;
i++)
{
ListItem
item
=
this.ListBox2.Items[index];
if
(this.ListBox2.Items[index].Selected)
{
this.ListBox2.Items.Remove(item);
index--;
//listbox删除一行后,后面的一行将自动移上去
this.ListBox1.Items.Add(item);
}
index++;
}
}
然后在page_load里加:
if
(!IsPostBack)
{
initListBox();
ListBox1.Attributes.Add("ondblclick",
"ChangeItem('"
+
ListBox1.ClientID
+
"','"
+
ListBox2.ClientID
+
"')");
ListBox2.Attributes.Add("ondblclick",
"ChangeItem('"
+
ListBox2.ClientID
+
"','"
+
ListBox1.ClientID
+
"')");
}
最后在aspx里加JS处理方法:
<script>
function
ChangeItem(l1,l2)
{
var
cc
=
document.getElementById(l1).options[window.document.getElementById(l1).selectedIndex].value;
var
dd
=
document.getElementById(l1).options[window.document.getElementById(l1).selectedIndex].text;
//alert(dd
+
":"
+
cc);
document.getElementById(l1).options.remove(window.document.getElementById(l1).selectedIndex);
var
op
=
new
Option(dd,cc,false,false);
document.getElementById(l2).options.add(op);
}
</script>
我已经调试过,完全符合你的要求
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我来补充一下:在JS方法里加个判断就更好了if(document.getElementById(l1).selectedIndex > -1),如果不加这个判断,如果listbox没有选中项会出现脚本错误
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询