ASP.NET:ListBox数据合并问题
因为网站原来的数据分类比较混乱,于是我要将不同分类的数据进行合并。其实这是一个很简单的问题,只要保证合并分类之后,原来各个分类之下的数据能够转移到合并之后的类型下面就可以了。结合需要做的工作,我选择了ListBox和DropDownList。其实这是一个取巧的办法,因为我已经有了一个修改分类信息的模块,所以不需要考虑是不是合并到一个并不存在的分类了。只要在合并之后简单的修改一次分类的名称就OK了。
新鲜出炉的代码:
/// /// ListBox绑定新闻类别 /// protected void typeListBoxBind() { this.typeListBox.DataSource = objAdmin.ReturnNewsType(); this.typeListBox.DataBind(); } /// /// DropDownList绑定新闻类别 /// protected void typeDropDownListBind() { this.typeDropDownList.DataSource = objAdmin.ReturnNewsType(); this.typeDropDownList.DataBind(); } /// /// 合并新闻类别 /// /// /// protected void typeCombine_OnClick(object sender, EventArgs e) { string ddl_xwlbid = this.typeDropDownList.SelectedValue.Trim(); for (int i = 0; i < this.typeListBox.Items.Count; i++) { if (this.typeListBox.Items[i].Selected) { string lb_xwlbid = this.typeListBox.Items[i].Value.Trim(); if (ddl_xwlbid == lb_xwlbid) { //要合并到的新闻类别,不需要任何改动 } else { //要合并掉的新闻类别,先将kb_xinwen中对应的新闻的xwlbid //改作要合并到的新闻类别的xwlbid,然后删除此分类 this.objAdmin.ChangeNewsType(lb_xwlbid, ddl_xwlbid); this.objAdmin.DeleteNewsType(lb_xwlbid); } } } ////////////////////重新绑定/////////// this.typeBind(); this.typeListBoxBind(); this.typeDropDownListBind(); this.errmsg.Text = 合并成功!; } |
里面的ListBox和DporDownList设定的DataTextField和DataValueField都是相同的,我所要做的工作就是将选定的分类的Value跟要合并到的下拉列表中的选择的分类的Value进行比对,如果Value相同不做任何操作,如果不同,那么先将需要修改类别的新闻其对应的xwlbid进行修改,然后将这个分类删除。当所有的比对结束之后,重新绑定所有数据,显示成功信息。
=======ASP.NET中ListBox属性和操作[转载]===========
SelectionMode
组件中条目的选择类型,即多选(Multiple)、单选(Single)
Rows
列表框中显示总共多少行
Selected
检测条目是否被选中
SelectedItem
返回的类型是ListItem,获得列表框中被选择的条目
Count
列表框中条目的总数
SelectedIndex
列表框中被选择项的索引值
Items
泛指列表框中的所有项,每一项的类型都是ListItem
取列表框中被选中的值
ListBox.SelectedValue
ListBox.Items.Add(所要添加的项);
//首先判断列表框中的项是否大于0
If(ListBox.Items.Count > 0 )
{
//移出选择的项
ListBox.Items.Remove(ListBox.SelectedItem);
}
//首先判断列表框中的项是否大于0
If(ListBox.Items.Count > 0 )
{
//清空所有项
ListBox.Items.Clear();
}
只需设置列表框的属性
SelectionMode=Multiple,按Ctrl可以多选
//判断第一个列表框中被选中的值
switch(ListBox1.SelectValue)
{
//如果是A,第二个列表框中就添加这些:
case A
ListBox2.Items.Clear();
ListBox2.Items.Add(A1);
ListBox2.Items.Add(A2);
ListBox2.Items.Add(A3);
//如果是B,第二个列表框中就添加这些:
case B
ListBox2.Items.Clear();
ListBox2.Items.Add(B1);
ListBox2.Items.Add(B2);
ListBox2.Items.Add(B3);
}
即:向上移位、向下移位
具体的思路为:创建一个ListBox对象,并把要移位的项先暂放在这个对象中。
如果是向上移位,就是把当前选定项的的上一项的值赋给当前选定的项,然后
把刚才新加入的对象的值,再附给当前选定项的前一项。
具体代码为:
//定义一个变量,作移位用
index = -1;
//将当前条目的文本以及值都保存到一个临时变量里面
ListItem lt=new ListItem
(ListBox.SelectedItem.Text,ListBox.SelectedValue);
//被选中的项的值等于上一条或下一条的值
ListBox.Items[ListBox.SelectedIndex].Text=ListBox.Items[ListBox.SelectedIndex + index].Text;
//被选中的项的值等于上一条或下一条的值
ListBox.Items[ListBox.SelectedIndex].Value=ListBox.Items[ListBox.SelectedIndex + index].Value;
//把被选中项的前一条或下一条的值用临时变量中的取代
ListBox.Items[ListBox.SelectedIndex].Test=lt.Test;
//把被选中项的前一条或下一条的值用临时变量中的取代
ListBox.Items[ListBox.SelectedIndex].Value=lt.Value;
//把鼠标指针放到移动后的那项上
ListBox.Items[ListBox.SelectedIndex].Value=lt.Value;
(1).移至首条
//将被选中项的索引设置为0就OK了
ListBox.SelectIndex=0;
(2).移至尾条
//将被选中项的索引设置为ListBox.Items.Count-1就OK了
ListBox.SelectIndex=ListBox.Items.Count-1;
(3).上一条
//用当前被选中的索引去减 1
ListBox.SelectIndex=ListBox.SelectIndex – 1;
(4).下一条
//用当前被选中的索引去加 1
ListBox.SelectIndex=ListBox.SelectIndex + 1;
历史上的今天
2017年:理想与道德——评易中天《王安石变法》(10条评论)
2015年:病来如山倒(88条评论)
2014年:GJB7691-2012数字示波器检定规程(31条评论)
2013年:Thinkpad X230预装Win8降级到Win7(69条评论)
2011年:夜·济南(6条评论)
2011年:博客终于升级到Wordpress 3.X版本(112条评论)
2010年:如何保存整个页面用于离线阅读[译文136](54条评论)
2009年:《藏地密码》7 端午纪念精编版,PDF电子书…(0条评论)
2009年:《粉红豹2(Pink Panther 2)》(2条评论)
2009年:《藏地密码》7 香巴拉之夜 第五部分 正面交锋(下)(0条评论)
2009年:《藏地密码》7 香巴拉之夜 第五部分 正面交锋(上)(0条评论)
2006年:一日行踪(0条评论)
2006年:看看我的UC在线时长吧^_^(2条评论)
2006年:今天是什么好日子?(0条评论)