[置顶] ListBox控件的数据绑定

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Text;
using System.Data;
using System.Data.SqlClient;


namespace cidp.edu.cn.Diary
{
    public partial class DiaryAdd : MyPage
    {
        cidp.edu.cn.BLL.Diary bll = new cidp.edu.cn.BLL.Diary();
        protected void Page_Load(object sender, EventArgs e)
        {
            
            if (!IsPostBack)
            {
                 InitData();
            }
        }
        private void InitData()
        {
            this.tbdate.Text = "";
            DateTime DiaryDate = DateTime.Now;
            this.tbdate.Text = DiaryDate.ToLocalTime().ToString();


            ///任务绑定///
            string strWhere = " TaskManager ='" + MyFullName+ "'";
            int pid=SessionUtil.GetCurrentProjectId();
            string username=MyUserName;
            BLL.Task task = new BLL.Task();
            DataSet ds = task.GetAllTaskList(pid, username);
            lboxTask.DataSource = ds;
            lboxTask.DataTextField = "TaskName";
            lboxTask.DataValueField = "TaskId";
            lboxTask.DataBind();
         }

一下内容来自度娘:

蜗牛的编程路

实现方法1:用绑定数据源的方法

using System.Data;

using System.Data.SqlClient;

..................

//建立连接,连接字符串的内容要视具体情况而定,这里只给出连接到本机的范例

SqlConnection con=new SqlConnection("server=(local);database=department;uid=sa;pwd=");

con.Open( );

SqlCommand cm=new SqlCommand("select empID,empName from emp",con);

SqlDataReader dr=cm.ExecuteReader( );

//绑定

this.lbxEmp.DataSource=dr;        //lbxEmp为ListBox对象

this.lbxEmp.DataTextField="empName";

this.lbxEmp.DataValueField="empID";

this.lbxEmp.DataBind( );

dr.Close( );

con.Close( );

实现方法2:使用集合添加

using System.Data;

using System.Data.SqlClient;

..................

//建立连接,连接字符串的内容要视具体情况而定,这里只给出连接到本机的范例

SqlConnection con=new SqlConnection("server=(local);database=department;uid=sa;pwd=");

con.Open( );

SqlCommand cm=new SqlCommand("select empID,empName from emp",con);

SqlDataReader dr=cm.ExecuteReader( );

while(dr.Read( ))

{

      this.lbxEmp.Items.add(new listItem(dr.GetString(1),dr.GetInt32(0).ToString( )));

}

 

dr.Close( );

con.Close( );

 

***********************************-----------------

. 属性列表:

    SelectionMode    组件中条目的选择类型,即多选(Multiple)、单选(Single)
    Rows             列表框中显示总共多少行
    Selected         检测条目是否被选中
    SelectedItem     返回的类型是ListItem,获得列表框中被选择的条目
    Count            列表框中条目的总数
    SelectedIndex    列表框中被选择项的索引值
    Items            泛指列表框中的所有项,每一项的类型都是ListItem

2. 取列表框中被选中的值

     ListBox.SelectedValue

3. 动态的添加列表框中的项:

     ListBox.Items.Add("所要添加的项");

4. 移出指定项:

     //首先判断列表框中的项是否大于0
     If(ListBox.Items.Count > 0 )
     {
//移出选择的项
ListBox.Items.Remove(ListBox.SelectedItem);
     }

5. 清空所有项:

     //首先判断列表框中的项是否大于0
     If(ListBox.Items.Count > 0 )
     {
//清空所有项
ListBox.Items.Clear();
     }

6. 列表框可以一次选择多项:
   
     只需设置列表框的属性 SelectionMode="Multiple",按Ctrl可以多选

7. 两个列表框联动,即两级联动菜单

     //判断第一个列表框中被选中的值
     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");
     }

8. 实现列表框中项的移位
     即:向上移位、向下移位
     具体的思路为:创建一个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;

9. 移动指针到指定位置:

      (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;

出自 51CTO.COM博客

this.ListBox1.Items.Insertat(3,new   ListItem("插入在第3行之后项",""));

this.ListBox1.Items.Insertat(index,ListItem)

ListBox1.Items.Insert(0,new   ListItem("text","value"));

 

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后会出现错误

 

Move the Item of ListBox

.aspx

--------------------------------

<asp:ListBox id="ListBox1" style="Z-INDEX: 105; LEFT: 96px; POSITION: absolute; TOP: 344px" runat="server">
    <asp:ListItem Value="a1">a1</asp:ListItem>
    <asp:ListItem Value="a2">a2</asp:ListItem>
    <asp:ListItem Value="a3">a3</asp:ListItem>
   </asp:ListBox>

----------------------------------

.cs

//for 个

private void Button1_Click(object sender, System.EventArgs e){
   if (this.ListBox1.SelectedIndex>=0)
   {
    int i = ListBox1.SelectedIndex;
    if(i>0)
    {
     string values = this.ListBox1.Items[i].Text ;
     this.ListBox1.Items[i].Text = this.ListBox1.Items[i-1].Text ;
     this.ListBox1.Items[i-1].Text = values;
    }
   }

}

ASP.NET中ListBox实现Double Click事件

2007-06-24 13:18

在ASP.NET中的ListBox控件的使用中很多人都发现没有了WINFORM中ListBox的鼠标双击事件

这样就给我们开发带来很多不方便的地方

也看了很多CSDN上用JS来实现双击事件的方法,都是不完整的,最后发现以下方法是最有效的

首先在WEB页面上加入JS脚本和存放ListBox事件的隐藏输入框
再将ASP.NET控件ListBox中加入双击事件声明
<html>

<head>

     <script language="javascript">

     function ListBox1_DoubleClick() {

       /* we will change value of this hidden field so

    that in

    page load event we can identify event.

            */

        document.forms[0].ListBox1Hidden.value = "doubleclicked";

        document.forms[0].submit();

     }

</script>

</head>

<body>

     <form runat="server">

         <div>Double click on Listbox

             <br />

             <asp:ListBox id="ListBox1"

                     ondblclick="ListBox1_DoubleClick()" runat="server">

                 <asp:ListItem Value="1">One</asp:ListItem>

                 <asp:ListItem Value="2">Two</asp:ListItem>

                 <asp:ListItem Value="3">Three</asp:ListItem>

                 <asp:ListItem Value="4">Four</asp:ListItem>

             </asp:ListBox>

             <input type="hidden" name="ListBox1Hidden" />

         </div>

         <div>click on button

             <br />

             <asp:Button id="Button1" onclick="Button1_Click"

                 runat="server" Text="Button"/>

         </div>

     </form>

</body>

</html>

 

 

最后在WEB窗体加载时候执行下列代码就能实现双击ListBox中Item执行一些操作

 

void Page_Load(Object sender, EventArgs e){

   if(Request.Params["ListBox1Hidden"] != null

     && (string)Request.Params["ListBox1Hidden"] == "doubleclicked" {

    //This means It was double click

     Response.Write("Double Click was fired selected item is "

     + ListBox1.SelectedItem.Text);

 

     //可以在这里加要运行的代码

    }

}

 

希望这篇文章能对大家有帮助,不要再受CSDN上帖子的误导了

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();

 

如果是在后台做的话
AutoPostBack =true
然后给第一个listbox加事件(SelectedIndexChanged)
然后一个遍历就可以出来了

posted @ 2012-12-30 10:20  shouqiang Wei  阅读(446)  评论(0编辑  收藏  举报